簡介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 沉浸模式,用戶能夠交互的界面。同時,用戶上下拉系統欄時,會自動隱藏系統欄