Android中的System UI Visibility

在Android中可以通過View的一些常量來改變狀態(tài)欄或者屏幕的一些特性,View.setSystemUiVisibility(UiOptions),具體如下(隱藏系統(tǒng)欄和低能模式會在有app bar時失效):
View.setSystemUiVisibility(int visibility)中,visibility是Mode與Layout任意取值的組合,可傳入的實參為:

Mode

View.SYSTEM_UI_FLAG_LOW_PROFILE:狀態(tài)欄顯示處于低能顯示狀態(tài)(low profile模式),狀態(tài)欄上一些圖標(biāo)顯示會被隱藏。
View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏顯示,且狀態(tài)欄被隱藏覆蓋掉。等同于WindowManager.LayoutParams.FLAG_FULLSCREEN
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隱藏虛擬按鍵(導(dǎo)航欄)。有些手機會用虛擬按鍵來代替物理按鍵。
View.SYSTEM_UI_FLAG_IMMERSIVE:這個flag只有當(dāng)設(shè)置了SYSTEM_UI_FLAG_HIDE_NAVIGATION才起作用。如果沒有設(shè)置這個flag,任意的View相互動作都退出SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果設(shè)置就不會退出。
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY:這個flag只有當(dāng)設(shè)置了SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION 時才起作用。如果沒有設(shè)置這個flag,任意的View相互動作都壞退出SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_HIDE_NAVIGATION模式。如果設(shè)置就不受影響。

Layout

View.SYSTEM_UI_FLAG_LAYOUT_STABLE: 保持View Layout不變,隱藏狀態(tài)欄或者導(dǎo)航欄后,View不會拉伸。
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:讓View全屏顯示,Layout會被拉伸到StatusBar下面,不包含NavigationBar。
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:讓View全屏顯示,Layout會被拉伸到StatusBar和NavigationBar下面。

例如:

    public void updateSystemUI() {
        int visibility = 0;
        for (int i = 0; i < mCheckControls.length; i++) {
            if (mCheckControls[i].isChecked()) {
                visibility |= mCheckFlags[i];
            }
        }
        mImage.setSystemUiVisibility(visibility);
    }

通過Window flag 和 Theme(通過設(shè)置Widnow flag修改屬性)

WindowManager.LayoutParams.FLAG_FULLSCREEN:隱藏狀態(tài)欄全屏顯示W(wǎng)indow并且會拉伸??梢酝ㄟ^theme中的android.R.attr.windowFullscreen來控制。
WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN:允許window contents擴展到屏幕中的縮放區(qū)域內(nèi),如果有縮放區(qū)域的話。 可以通過theme中android.R.attr.windowOversca來控制。
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS:使?fàn)顟B(tài)欄透明同時會拉伸window到全屏的狀態(tài)(保留NavigationBar高度),假如有ActionBar,ActionBar依舊會顯示??梢酝ㄟ^theme中的android.R.attr.windowTranslucentStatus來控制。
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION:NavigationBar透明同時會拉伸Window到全屏(不保留StatusBar和NavigationBar的高度)??梢酝ㄟ^theme中的android.R.attr#windowTranslucentNavigation來控制。

代碼中使用Window flag:

    private void setFullscreen(boolean on) {
        Window win = getWindow();
        WindowManager.LayoutParams winParams = win.getAttributes();
        final int bits = WindowManager.LayoutParams.FLAG_FULLSCREEN;
        if (on) {
            winParams.flags |= bits;
        } else {
            winParams.flags &= ~bits;
        }
        win.setAttributes(winParams);
    }

Window Feature

通過requestFeature來設(shè)置Window相關(guān)的顯示狀態(tài)。
getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

常見Flag:1. Window.FEATURE_ACTION_BAR_OVERLAY:請求ActionBar覆蓋在window content上面。
2.DEFAULT_FEATURES:系統(tǒng)默認(rèn)狀態(tài),一般不需要指定
3.FEATURE_CONTEXT_MENU:啟用ContextMenu,默認(rèn)該項已啟用,一般無需指定
4.FEATURE_CUSTOM_TITLE:自定義標(biāo)題。當(dāng)需要自定義標(biāo)題時必須指定。如:標(biāo)題是一個按鈕時
5.FEATURE_INDETERMINATE_PROGRESS:不確定的進度
6.FEATURE_LEFT_ICON:標(biāo)題欄左側(cè)的圖標(biāo)
7.FEATURE_NO_TITLE:沒有標(biāo)題
8.FEATURE_OPTIONS_PANEL:啟用“選項面板”功能,默認(rèn)已啟用。
9.FEATURE_PROGRESS:進度指示器功能
10.FEATURE_RIGHT_ICON:標(biāo)題欄右側(cè)的圖標(biāo)

可以參考android官方API Demos查看具體效果,點擊Views - System UI Visibility - System UI Modes :

Screenshot_1508730903.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容