標籤:ble 沒有 操作 標題 內容 src near 名稱 androi
需求:
手機app ,當打遊戲或者全屏看視頻的時候會發現這時候手機頂部的狀態列是不顯示的,當我們從手機頂端向下進行滑動或手機底端向上滑動的時候,狀態列會顯示出來,如果短暫的幾秒時間沒有操作的話,狀態列會再次隱藏。
實現代碼:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus && Build.VERSION.SDK_INT >= 19) { // 如果有焦點,說明當前與使用者互動 並且SDK_INT>=19 只有Android4.4+才支援沈浸式效果
View decorView = getWindow().getDecorView();
decorView.setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
}
效果:
代碼解釋:
1、 onWindowFocusChanged(boolean hasFocus) 方法
Activity生命週期,可以理解為走到這個方法的時候,activity才是真正意義上的顯示/消失在互動層。 當activity顯示在棧頂,和使用者互動的時候,是有焦點的,hasFocus 為 true 當activity退出棧頂,不和使用者互動的時候,是沒有焦點的,hasFocus 為 false
2、getWindow.getDecorView()方法 , 擷取Window介面最頂層View
一、DecorView為整個Window介面的最頂層View。 二、DecorView只有一個子項目為LinearLayout。代表整個Window介面,包含通知欄,標題列,內容顯示欄三塊地區。 三、LinearLayout裡有兩個FrameLayout子項目。 (20)為標題列顯示介面。只有一個TextView顯示應用的名稱。也可以自訂標題列,載入後的自訂標題列View將加入FrameLayout中。 (21)為內容欄顯示介面。就是setContentView()方法載入的布局介面,加入其中。
註:
和Activity全螢幕顯示的區別在於,如果手機有虛擬導覽列(即虛擬後退、home鍵),則全屏會一直顯示,而上述方法,導覽列和狀態列同步顯示,上述需求則用全屏實現效果不對。
Android項目實戰(四十一):遊戲和視頻類型應用 狀態列沈浸式效果