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使用时才会起作用。

相关推荐
拭心5 小时前
Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍
android
带电的小王7 小时前
WhisperKit: Android 端测试 Whisper -- Android手机(Qualcomm GPU)部署音频大模型
android·智能手机·whisper·qualcomm
梦想平凡7 小时前
PHP 微信棋牌开发全解析:高级教程
android·数据库·oracle
元争栈道8 小时前
webview和H5来实现的android短视频(短剧)音视频播放依赖控件
android·音视频
阿甘知识库8 小时前
宝塔面板跨服务器数据同步教程:双机备份零停机
android·运维·服务器·备份·同步·宝塔面板·建站
元争栈道9 小时前
webview+H5来实现的android短视频(短剧)音视频播放依赖控件资源
android·音视频
MuYe9 小时前
Android Hook - 动态加载so库
android
居居飒10 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin
yaosheng_VALVE12 小时前
探究全金属硬密封蝶阀的奥秘-耀圣控制
运维·eclipse·自动化·pyqt·1024程序员节
dami_king12 小时前
SSH特性|组成|SSH是什么?
运维·ssh·1024程序员节