標籤:

當 Activity 以全屏模式運行時,如何允許 Android 系統狀態欄在頂層出現,而不迫使 Activity 重新布局讓出空間?

隱藏狀態欄通過簡單的設置就可以了,我想問的是如何在全屏的 Activity 中展示狀態欄。我期望的展示效果是狀態欄覆蓋 Activity 的界面而不是重排。


private void hideStatusBar() {

WindowManager.LayoutParams attrs = getWindow().getAttributes();

attrs.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;

getWindow().setAttributes(attrs);

}

private void showStatusBar() {

WindowManager.LayoutParams attrs = getWindow().getAttributes();

attrs.flags = ~WindowManager.LayoutParams.FLAG_FULLSCREEN;

getWindow().setAttributes(attrs);

}

關鍵是,在做了該Activity的全屏設置的前提下,還要在onCreate()方法中加入如下語句:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

此方案我已經試過了,可行,且不會導致Activity重排。

此方案是我Google搜索出來的,網址如下:

Hacking Android: Show/hide status bar in fullscreen application

感謝他!


可以參考這篇文章: Android沉浸式模式的實現


//默認全屏顯示

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

//不全屏顯示

getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);

//全屏顯示

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);


View view = findViewById(R.id.view);

view.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);

setSystemUiVisibility()的api level為11

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN的api level為16

如果主題里有ActionBar

那麼在setContentView()之前調用

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

會比較好


推薦閱讀:

Android開發中在哪些場合下會需要使用AIDL?
怎樣才能獲得編程開發的樂趣?
怎樣著手研究 Android 源代碼?
安卓培訓公司黑馬程序員怎麼樣?有必要參加安卓培訓嗎?可以自學嗎?
為什麼 Android 系統那麼多 ROM,這是必然的嗎,有必要嗎?

TAG:Android開發 |