純純的一邊開發一邊學習,是小白是菜鳥,單純的記錄和學習,大神勿噴,理解有錯望指正~
getWindow().getDecorView().setSystemUiVisibility(…)
該方法用于控制系統 UI(如狀態欄、導航欄)的可見性和行為;
雖然該方法在 Android 11(API 30)及更高版本中已被標記為廢棄,但在舊版本中仍廣泛使用;
最近有狀態欄收起顯示導致app布局伸縮的問題,也是靠此方法解決的,所以在此做一個記錄;
以下是其支持的常用屬性(通過 View 類的常量定義):
基礎可見性控制
View.SYSTEM_UI_FLAG_VISIBLE // 默認狀態,顯示系統UI(狀態欄+導航欄)。View.SYSTEM_UI_FLAG_LOW_PROFILE // "低調模式"(如游戲場景),狀態欄/導航欄圖標變暗。View.SYSTEM_UI_FLAG_HIDE_NAVIGATION // 隱藏導航欄(用戶交互后會重新顯示)。View.SYSTEM_UI_FLAG_FULLSCREEN // 隱藏狀態欄(類似 Activity#setFullscreen(true))。
沉浸式模式(Immersive Mode)
View.SYSTEM_UI_FLAG_IMMERSIVE // 結合 HIDE_NAVIGATION,觸摸屏幕不會退出沉浸式,需邊緣滑動觸發。View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY // 類似 IMMERSIVE,但短暫自動隱藏系統UI(如視頻播放場景)。
布局行為控制
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION // 隱藏導航欄時,允許內容延伸到導航欄區域。View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN // 隱藏狀態欄時,允許內容延伸到狀態欄區域。View.SYSTEM_UI_FLAG_LAYOUT_STABLE // 保持布局穩定,避免系統UI顯隱導致內容跳動。
狀態欄樣式(Android 4.4+)
View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR // 狀態欄文字/圖標淺色(適合淺色背景,需API 23+完全支持)。View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR //導航欄按鈕淺色(API 26+)。
我遇到的問題是從一個App1里進入App2的時候,由于App2是收起狀態欄的,所以導致App1的布局拉伸了!退出和進入都會因為狀態欄的隱藏和顯示導致布局變化,顯得很不和諧。
所以在App1的activity里面加入了SYSTEM_UI_FLAG_LAYOUT_STABLE
這個屬性,保持布局穩定,就不會出現這個情況啦!
使用方式:
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
}