2017-08-16 129 views
23

我使用的是AppCompatDialogFragment表現出BottomSheetDialog。單擊Navigation Bar上的後退按鈕可關閉BottomSheetDialog更改後退按鈕下箭頭鍵在導航欄

我想在Navigation Bar該圖標在後退按鈕更改爲「箭頭向下」圖標。這是默認情況下完成鍵盤顯示時,我想複製它爲底部工作表。

需要明確的是,在這裏我有什麼:

Current

這裏是我所需要的:

This is what I want

注意後退按鈕是一個 「箭頭向下」 。

導航欄是系統UI組件和我沒有看到改變它的外觀看起來像導航欄時,鍵盤是可見的顯示方式。

+0

只有打開鍵盤時纔會顯示向下箭頭。我很好奇你有什麼用例?因爲如果它只是一個願望,比你還可以說*「我想要一個八角形而不是主頁按鈕」*。你想成爲一個壞男孩並且違反規則,這意味着用戶肯定知道在什麼情況下箭頭變成了箭頭向下,並且你想在那裏引入根本性的改變,顯然谷歌不允許這樣做,因爲用戶體驗應該是貫穿整個平臺。 – azizbekian

+3

@azizbekian我想在顯示'BottomDialog'時顯示向下箭頭。當點擊後退按鈕時,'BottomDialog'被滑下來消除,顯示向下箭頭而不是傳統的後退按鈕是有意義的。 – Vlad

+0

@azizbekian API允許您更改後退按鈕的行爲,因此允許您更改關聯的圖標是有意義的。 – ben75

回答

8

在安卓Ø改變圖標的​​概念引入,但它仍然是通過第三方應用程序。 Custom Navigation Bar使用WRITE_SECURE_SETTINGS更改圖標。 在Android O中,您可以更改酒吧的顯示,即Light或Dark主題。

解決方案2可能更多的是對您有所幫助。 您可以在導航欄上創建一個popup window,具有所需的佈局,例如3個按鈕,最近的應用和主頁按鈕。通過這種方式,您可以相應地更改後退按鈕圖標。確保彈出窗口是相同的高度導航欄,然後你可以使自己的功能產品和最新的應用程序,並在後面function您可以關閉BottomSheetDialog並刪除彈出式窗口。

下面是主頁鍵以及最近應用程序的代碼。對於後退按鈕,請根據自己的圖標做相應的操作。

對於主頁按鈕。

Intent startMain = new Intent(Intent.ACTION_MAIN); 
startMain.addCategory(Intent.CATEGORY_HOME); 
startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
startActivity(startMain); 

對於最近使用的應用程序。

Class serviceManagerClass = Class.forName("android.os.ServiceManager"); 
Method getService = serviceManagerClass.getMethod("getService", String.class); 
IBinder retbinder = (IBinder) getService.invoke(serviceManagerClass, "statusbar"); 
Class statusBarClass = Class.forName(retbinder.getInterfaceDescriptor()); 
Object statusBarObject = statusBarClass.getClasses()[0].getMethod("asInterface", IBinder.class).invoke(null, new Object[] { retbinder }); 
Method clearAll = statusBarClass.getMethod("toggleRecentApps"); 
clearAll.setAccessible(true); 
clearAll.invoke(statusBarObject); 

對於後退按鈕 //使用圖標和關閉BottomSheetDialog的功能。

對於由adb命令計算的的導航欄

public static int getSoftButtonsBarSizePort(Activity activity) { 
    // getRealMetrics is only available with API 17 and + 
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { 
     DisplayMetrics metrics = new DisplayMetrics(); 
     activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); 
     int usableHeight = metrics.heightPixels; 
     activity.getWindowManager().getDefaultDisplay().getRealMetrics(metrics); 
     int realHeight = metrics.heightPixels; 
     if (realHeight > usableHeight) 
      return realHeight - usableHeight; 
     else 
      return 0; 
    } 
    return 0; 
} 

你也可以做到這一點的高度,但要確保它可以搞砸你的navigationBar,你不能回到原來的navigationBar

我希望它有幫助。

+0

如何在'Navigation Bar'頂部定位'popup window'?我是否必須將應用設置爲沉浸式模式? – Vlad

+0

https://stackoverflow.com/a/34595261/6761707檢查這一點,你會知道如何確切地使它@Vlad而不是Gravity.TOP使用gravity.BOTTOM而不是透明的你自己的顏色。並最終...當你的customViewGroup添加這些按鈕,並點擊事件。 謝謝我希望它幫助並做upVote,如果它適合你 – Sahil

+0

你也可以使用你的BottomNavigationView,並確保它使用上面的評論答案添加到NavgationBar。再次感謝 – Sahil

4

前面已經回答了,它會在Android的O.推出

對於之前的版本僅可能爲Android 3.x或4.4或以上版本使用標誌爲SYSTEM_UI_FLAG_IMMERSIVESYSTEM_UI_FLAG_LAYOUT_FULLSCREENSYSTEM_UI_FLAG_HIDE_NAVIGATION等。但仍然非常有限,付出很多努力,你會得到一個不太友好甚至不好的結果。

原因是因爲這是不可能的,因爲它是一個安全問題。應用可能會阻止用戶退出應用。

看看這些鏈接: