項目在開發閱讀器,閱讀器對閱讀界面的要求就是在工具欄不顯示的狀態下,ActionBar和NavigationBar都是不顯示的,當工具欄顯示時它們都出來,這就需要動態控制它們的顯示與隱藏。
第一階段:沒有考慮NavigationBar的情況,單純控制ActionBar的顯示與隱藏
private void full(boolean enable) { if (enable) { WindowManager.LayoutParams lp = getWindow().getAttributes(); lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN; getWindow().setAttributes(lp); getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } else { WindowManager.LayoutParams attr = getWindow().getAttributes(); attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().setAttributes(attr); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); } }
第二階段:測試發現華為手機NavigationBar會影響使用,開始動態設置ActionBar和NavigationBar的隱藏與顯示
private void full(boolean enable) { if (enable) { if (Build.VERSION.SDK_INT >= 19) { getWindow().getDecorView().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); } } else { if (Build.VERSION.SDK_INT >= 19) { getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY); } }
上面講實現,再來看看用法:
android想要應用運行時全屏有一種方法是在activity的onCreat方法中加入如下代碼:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);並且需要在setContentView()之前,否則無效過。從這么多的苛刻條件可以看出這種方法無法滿足動態控制。
下面的方法可以滿足這個需要。調用View的 setSystemUiVisibility()
方法,其參數如下:
1 View.SYSTEM_UI_FLAG_VISIBLE, //顯示狀態欄,Activity不全屏顯示(恢復到有狀態的正常情況)。 2 3 View.INVISIBLE, //隱藏狀態欄,同時Activity會伸展全屏顯示。 4 5 View.SYSTEM_UI_FLAG_FULLSCREEN , //Activity全屏顯示,且狀態欄被隱藏覆蓋掉。 6 7 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, //Activity全屏顯示,但狀態欄不會被隱藏覆蓋,狀態欄依然可見,Activity頂端布局部分會被狀態遮住。 8 9 View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION, //效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 10 11 View.SYSTEM_UI_LAYOUT_FLAGS, //效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 12 13 View.SYSTEM_UI_FLAG_HIDE_NAVIGATION, //隱藏虛擬按鍵(導航欄)。有些手機會用虛擬按鍵來代替物理按鍵。 14 15 View.SYSTEM_UI_FLAG_LOW_PROFILE, //狀態欄顯示處於低能顯示狀態(low profile模式),狀態欄上一些圖標顯示會被隱藏。
Color:
Android design theme color
<style name="AppTheme.NoActionBar"> <!--狀態欄顏色--> <item name="colorPrimaryDark">@color/colorPrimaryDark</item> <!--控制各個控件被選中時的顏色--> <item name="colorAccent">@color/colorAccent</item> <!--頁面背景色--> <item name="android:windowBackground">@color/windowBackg</item> <!--底部導航欄顏色--> <item name="android:navigationBarColor">@color/navigationColor</item> <!--Appbar背景色--> <item name="android:colorPrimary">@color/colorPrimary</item> <!--ToolBar上的Title顏色--> <item name="android:textColorPrimary">@color/textColorPrimary</item> <!--各個控制控件的默認顏色--> <item name="android:colorControlNormal">@color/colorControlNormal</item> </style>
網文參考: