Android 4.4 Camera 源碼里面有一個操作界面的方法:
- /**
- * If {@param visible} is false, this hides the action bar and switches the
- * system UI to lights-out mode. If {@param hideLater} is true, a delayed message
- * will be sent after a timeout to hide the action bar.
- */
- private void setSystemBarsVisibility(boolean visible, boolean hideLater) {
- mMainHandler.removeMessages(HIDE_ACTION_BAR);
- int currentSystemUIVisibility = mAboveFilmstripControlLayout.getSystemUiVisibility();
- int newSystemUIVisibility = DEFAULT_SYSTEM_UI_VISIBILITY |
- (visible ? View.SYSTEM_UI_FLAG_VISIBLE :
- View.SYSTEM_UI_FLAG_LOW_PROFILE | View.SYSTEM_UI_FLAG_FULLSCREEN);
- if (newSystemUIVisibility != currentSystemUIVisibility) {
- mAboveFilmstripControlLayout.setSystemUiVisibility(newSystemUIVisibility);
- }
- boolean currentActionBarVisibility = mActionBar.isShowing();
- if (visible != currentActionBarVisibility) {
- if (visible) {
- mActionBar.show();
- } else {
- mActionBar.hide();
- }
- if (mOnActionBarVisibilityListener != null) {
- mOnActionBarVisibilityListener.onActionBarVisibilityChanged(visible);
- }
- }
- // Now delay hiding the bars
- if (visible && hideLater) {
- mMainHandler.sendEmptyMessageDelayed(HIDE_ACTION_BAR, SHOW_ACTION_BAR_TIMEOUT_MS);
- }
- }
這個方法主要封裝的就是是否顯示狀態欄與 ActionBar.
View類提供了setSystemUiVisibility和getSystemUiVisibility方法,這兩個方法實現對狀態欄的動態顯示或隱藏的操作,以及獲取狀態欄當前可見性。
setSystemUiVisibility(int visibility)方法可傳入的實參為:
1. View.SYSTEM_UI_FLAG_VISIBLE:顯示狀態欄,Activity不全屏顯示(恢復到有狀態的正常情況)。
2. View.INVISIBLE:隱藏狀態欄,同時Activity會伸展全屏顯示。
3. View.SYSTEM_UI_FLAG_FULLSCREEN:Activity全屏顯示,且狀態欄被隱藏覆蓋掉。
4. View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN:Activity全屏顯示,但狀態欄不會被隱藏覆蓋,狀態欄依然可見,Activity頂端布局部分會被狀態遮住。
5. View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
6. View.SYSTEM_UI_LAYOUT_FLAGS:效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
7. View.SYSTEM_UI_FLAG_HIDE_NAVIGATION:隱藏虛擬按鍵(導航欄)。有些手機會用虛擬按鍵來代替物理按鍵。
8. View.SYSTEM_UI_FLAG_LOW_PROFILE:狀態欄顯示處於低能顯示狀態(low profile模式),狀態欄上一些圖標顯示會被隱藏。