fitsSystemWindows 沉浸式

為了自定義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 ,這三要同時考慮,少了會看起怪怪的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容