Android SystemUI setSystemUiVisibility()参数Flag详解

1**:相关 Flag****特性详解**

View.SYSTEM_UI_FLAG_LAYOUT_STABLE**:**

特性:默认状态下 ,稳定页面显示布局。

当 StatusBar和 NavigationBar动态显示和隐藏时,系统为 fitSystemWindow="true"的view设置的padding大小都不会变化,所以view布局的位置也不会发生移动。当使用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN或SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION),同时view设置fitSystemWindow=true时,系统会为此View自动设置padding,此padding的大小由View.fitSystemWindows(Rect)的Rect提供。

一般情况下,当StatusBar和NavigationBar显示时,paddingTop的大小为StatusBar的高度。

当StatusBar和NavigationBar被隐藏时,View的padingBottom和paddingTop的大小就变成了0,因此StatusBar和NavigationBar的显示和隐藏造成的padding变化,进而View内容的位置变化,从而造成应用显示位置闪动的问题,影响使用体验。

使用SYSTEM_UI_FLAG_LAYOUT_STABLE的作用,就是当StatusBar和NavigationBar的显示和隐藏,系统为View设置的padding都不会变化,因此View内容的位置不会变化,此即为稳定页面显示的布局。

当设置 SYSTEM_UI_FLAG_FULLSCREEN | SYSTEM_UI_FLAG_LAYOUT_STABLE时, 会同时隐藏 StatusBar 和应用内的 Actionbar ,但StatusBar所占空间不会隐藏,只会变成空白。同时View所在window的显示范围也不会伸展到StatusBar所占空间。这时,如果是加上SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN属性,View所在window的显示范围,则会伸展到 StatusBar所在的空间。同样对 NavigationBar如此操作,也会是一样的效果。

2**:相关 Flag****特性详解**

View.SYSTEM_UI_FLAG_FULLSCREEN**:**

特性:隐藏SysmteUI系统界面StatusBar

这属性与 WindowManager.LayoutParams.FLAG_FULLSCREEN有相同视觉效果。不同点在于,此Flag一般用在暂时需要全屏的情形(如:阅读应用,全屏视频等),以便让用户的注意力暂时集中在内容上,而如果只是简单的需要一直停留在全屏状态(如:游戏应用),使用WindowManager.LayoutParams.FLAG_FULLSCREEN则是更好的选择。

此Flag也会因为各种的界面交互(如:跳转到其他应用、 下拉StatusBar、弹出键盘等)的触发而被系统清除,退出全屏显示StatusBar 。

View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN**:**

特性:在不隐藏StatusBar的情况下,将View所在Window的显示范围扩展到StatusBar下。同时,应用界面部分内容被StatusBar覆盖遮挡。

当使用此Flag时,设置fitSystemWindow=true的view,会被系统自动添加大小为statusBar和ActionBar高度之和相同的paddingTop。当window设置WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS时,此Flag会被系统会自动添加。

3**:相关 Flag****特性详解**

View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

特性:隐藏SysmteUI系统界面NavigationBar

此时用户的任何界面交互,都会导致此Flag被系统清除,进而导航栏自动重新显示,同时 View.SYSTEM_UI_FLAG_FULLSCREEN 也会被自动清除,因此 StatusBar也会同时显示出来。

View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

特性:在不隐藏导航栏的情况下,将Activity的显示范围扩展到导航栏底部。同时Activity的部分内容也因此被NavigationBar覆盖遮挡。

当使用此Flag时,设置fitSystemWindow=true的view,会被系统自动添加大小为NavigationBar高度相同的paddingBottom。当window设置WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION时,此Flag会被系统会自动添加。

4**:相关 Flag****特性详解**

View.SYSTEM_UI_FLAG_IMMERSIVE**:**

特性:避免某些用户交互造成系统自动清除全屏状态。

View.SYSTEM_UI_FLAG_IMMERSIVE和View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY的使用主要是为了当设置全屏模式时,避免某些用户交互造成系统自动清除全屏状态。当使用View.SYSTEM_UI_FLAG_HIDE_NAVIGATION隐藏导航栏时,配合此特性,只有第三、四种操作会导致导航栏的隐藏状态被系统自动清除;否则,任何交互都会导致导航栏的隐藏状态被系统自动清除。此标识只有配合View.SYSTEM_UI_FLAG_HIDE_NAVIGATION才有作用

View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY**:**

特性:避免某些用户交互造成系统自动清除全屏状态。同时Activity的部分内容也因此被StatusBar覆盖遮挡

用View.SYSTEM_UI_FLAG_HIDE_NAVIGATION隐藏导航栏,配合使用此Flag,只有用户的第四种操作会导致状态栏或(和)导航栏的隐藏状态被系统自动清除。否则任何交互都会导致相应状态的清除。此Flag只有配合SYSTEM_UI_FLAG_FULLSCREEN和SYSTEM_UI_FLAG_HIDE_NAVIGATION使用时才会起作用。

相关推荐
inmK13 小时前
蓝奏云官方版不好用?蓝云最后一版实测:轻量化 + 不限速(避更新坑) 蓝云、蓝奏云第三方安卓版、蓝云最后一版、蓝奏云无广告管理工具、安卓网盘轻量化 APP
android·工具·网盘工具
giaoho3 小时前
Android 热点开发的相关api总结
android
咖啡の猫4 小时前
Android开发-常用布局
android·gitee
程序员老刘5 小时前
Google突然“变脸“,2026年要给全球开发者上“紧箍咒“?
android·flutter·客户端
Tans55 小时前
Androidx Lifecycle 源码阅读笔记
android·android jetpack·源码阅读
雨白5 小时前
实现双向滑动的 ScalableImageView(下)
android
峥嵘life5 小时前
Android Studio新版本编译release版本apk实现
android·ide·android studio
studyForMokey8 小时前
【Android 消息机制】Handler
android
敲代码的鱼哇8 小时前
跳转原生系统设置插件 支持安卓/iOS/鸿蒙UTS组件
android·ios·harmonyos
翻滚丷大头鱼8 小时前
android View详解—动画
android