很多情況下,例如華爲手機和谷歌原生系統只有虛擬按鍵,這時候假如你們做了特殊處理我們可以將佈局繪製到navigationBar裏面。當然爲了避免這種情況,我們應該講所有的繪圖到在navigationBar上面。
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:clipToPadding">false</item>
<item name="android:windowTranslucentNavigation">false</item>//適配華爲手機的虛擬按鍵
<item name="android:windowTranslucentStatus">true</item>
<item name="android:navigationBarColor">@color/white10</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/white10</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowBackground">@color/windowBackground</item>
<item name="android:textColorHighlight">@color/white</item>
<item name="android:textColorPrimary">@color/white</item>
<item name="android:textColorSecondary">@color/white</item>
<item name="android:textColor">@color/white</item>
<item name="android:divider">@color/white</item>
<item name="android:textColorHint">@color/white</item>
<item name="colorControlNormal">@color/white</item>
<item name="colorControlActivated">@color/white</item>
<item name="colorControlHighlight">@color/white</item>
</style>
//適配華爲手機的虛擬按鍵
<item name="android:windowTranslucentNavigation">false</item>
沉浸欄導航欄也不要了
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明狀態欄
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
這樣我們就沒有手動繪製得出每個navigationBar的高度。stackoverflow的至今沒有一個完全的答案可以判斷是否存在虛擬按鍵
private int getNavigationBarHeight() {
Resources resources = getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
}
加了一個margin但是在小米手機這種沒有虛擬鍵的也同時預留了一段空白。