Android setSystemUiVisibility詳解

簡介android

本文主要講解setSystemUiVisibility方法中的參數各個屬性標誌對應的用法和實際效果。主要講解的標誌有: 
- SYSTEM_UI_FLAG_LOW_PROFILE 
- SYSTEM_UI_FLAG_HIDE_NAVIGATION 
- SYSTEM_UI_FLAG_FULLSCREEN 
- SYSTEM_UI_FLAG_LAYOUT_STABLE 
- SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 
- SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 
- SYSTEM_UI_FLAG_IMMERSIVE 
- SYSTEM_UI_FLAG_IMMERSIVE_STICKY佈局

下圖是沒有設置任何標誌時的效果。.net

解析視頻

View.SYSTEM_UI_FLAG_LOW_PROFILExml

設置狀態欄和導航欄中的圖標變小,變模糊或者弱化其效果。這個標誌通常用於遊戲,電子書,視頻,或者不須要去分散用戶注意力的應用軟件。blog

代碼調用遊戲

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE);
1
實際效果get

從上圖的效果中,咱們能夠看出狀態欄和導航欄中相應的圖標都變成了一個小點,這就達到了弱化的效果,具體變成什麼效果要根據實際的機型系統版本而定。同時,點擊狀態欄和導航欄相應的位置,這些圖標的效果會還原成正常的狀態。it

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION軟件

隱藏導航欄,點擊屏幕任意區域,導航欄將從新出現,而且不會自動消失。

代碼調用

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
1
實現效果

View.SYSTEM_UI_FLAG_FULLSCREEN

隱藏狀態欄,點擊屏幕區域不會出現,須要從狀態欄位置下拉纔會出現。

代碼調用

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN);
1
實現效果

View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

將佈局內容拓展到導航欄的後面。

代碼調用

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
1
實現效果

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

將佈局內容拓展到狀態的後面。

代碼調用

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
1
實現效果

View.SYSTEM_UI_FLAG_LAYOUT_STABLE

穩定佈局,主要是在全屏和非全屏切換時,佈局不要有大的變化。通常和View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN、View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION搭配使用。同時,android:fitsSystemWindows要設置爲true。

代碼調用

private void toggle() {
    if (mVisible) {
        getWindow().getDecorView().setSystemUiVisibility(
                  View.SYSTEM_UI_FLAG_LOW_PROFILE
                | View.SYSTEM_UI_FLAG_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
    } else {
        getWindow().getDecorView().setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        );
    }

    mVisible = !mVisible;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:background="@drawable/bg"
    >
</FrameLayout>
1
2
3
4
5
6
7
實現效果

沒有加View.SYSTEM_UI_FLAG_LAYOUT_STABLE標誌的效果


加了View.SYSTEM_UI_FLAG_LAYOUT_STABLE標誌的效果


經過這個上面的效果對比,能夠很清楚的區分View.SYSTEM_UI_FLAG_LAYOUT_STABLE這個屬性的特性了。

View.SYSTEM_UI_FLAG_IMMERSIVE

使狀態欄和導航欄真正的進入沉浸模式,即全屏模式,若是沒有設置這個標誌,設置全屏時,咱們點擊屏幕的任意位置,就會恢復爲正常模式。因此,View.SYSTEM_UI_FLAG_IMMERSIVE都是配合View.SYSTEM_UI_FLAG_FULLSCREEN和View.SYSTEM_UI_FLAG_HIDE_NAVIGATION一塊兒使用的。

代碼調用

getWindow().getDecorView().setSystemUiVisibility(
                  View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE);
1
2
3
實現效果

對比View.SYSTEM_UI_FLAG_HIDE_NAVIGATION的效果,能夠看出來,在沒有設置View.SYSTEM_UI_FLAG_IMMERSIVE時,隨便點擊屏幕就能夠解除隱藏導航欄的狀態。因此,設置View.SYSTEM_UI_FLAG_IMMERSIVE就是真正進入沉浸模式。

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY

它的效果跟View.SYSTEM_UI_FLAG_IMMERSIVE同樣。可是,它在全屏模式下,用戶上下拉狀態欄或者導航欄時,這些系統欄只是以半透明的狀態顯示出來,而且在必定時間後會自動消息。

代碼調用

getWindow().getDecorView().setSystemUiVisibility(
                 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
1
2
3
實現效果

額外補充

咱們在設置全屏和非全屏的時候,能夠經過下面的方法實現,代碼以下:

if (mVisible){ //全屏
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
} else { //非全屏
    getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
    );
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
總結

Flag    意義 SYSTEM_UI_FLAG_LOW_PROFILE    弱化狀態欄和導航欄的圖標 SYSTEM_UI_FLAG_HIDE_NAVIGATION    隱藏導航欄,用戶點擊屏幕會顯示導航欄 SYSTEM_UI_FLAG_FULLSCREEN    隱藏狀態欄 SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION    拓展布局到導航欄後面 SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN    拓展布局到狀態欄後面 SYSTEM_UI_FLAG_LAYOUT_STABLE    穩定的佈局,不會隨系統欄的隱藏、顯示而變化 SYSTEM_UI_FLAG_IMMERSIVE    沉浸模式,用戶能夠交互的界面 SYSTEM_UI_FLAG_IMMERSIVE_STICKY    沉浸模式,用戶能夠交互的界面。同時,用戶上下拉系統欄時,會自動隱藏系統欄

相關文章
相關標籤/搜索