纯纯的一边开发一边学习,是小白是菜鸟,单纯的记录和学习,大神勿喷,理解有错望指正~
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);
}