為了自定義Status Bar和Navigation Bar的背景色。
需要設置window的uioption 為View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN。
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
存在Navigation Bar的話,還要附加View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION,
UI才真的是“full screen”。此時navigation bar上的幾個按鈕圖標會疊加在UI底部上。
view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
最后,設置了fitsSystemWindows的View,就會由系統重新定義其paddingTop和paddingBotton。
有個小坑,只有一個View的fitsSystemWindows生效,并且同時設置了上下的padding。如果你設置的view不需要全屏的話,那得開手動檔。
public static boolean hasNavigationBar(Context context) {
boolean hasMenuKey = ViewConfiguration.get(context).hasPermanentMenuKey();
boolean hasBackKey = KeyCharacterMap.deviceHasKey(KeyEvent.KEYCODE_BACK);
return !hasMenuKey && !hasBackKey;
}
public static int getSystemHeight(Activity activity) {
Resources resources = activity.getResources();
int navigationId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
int statusId = resources.getIdentifier("status_bar_height", "dimen", "android");
mNavigationHeight = resources.getDimensionPixelSize(navigationId);
mStatusHeight = resources.getDimensionPixelSize(statusId);
}
結果是 fitsSystemWindows,navigation bar,Status bar ,這三要同時考慮,少了會看起怪怪的