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

相关推荐
下位子几秒前
『OpenGL学习滤镜相机』- Day8: 多重纹理与混合
android·opengl
TeleostNaCl3 分钟前
解决在 Android 使用 hierynomus/smbj 库时上传和下载文件较慢的问题
android·经验分享
峰哥的Android进阶之路25 分钟前
handler机制原理面试总结
android·面试
雨白27 分钟前
让代码更清晰:Android 中的 MVC、MVP 与 MVVM
android·mvc·mvvm
大布布将军28 分钟前
《前端九阴真经》
前端·javascript·经验分享·程序人生·前端框架·1024程序员节
liu****32 分钟前
12.线程同步和生产消费模型
linux·服务器·开发语言·c++·1024程序员节
魑魅魍魉都是鬼38 分钟前
不练不熟,不写就忘 之 compose 之 动画之 animateSizeAsState动画练习
android·compose
小苏兮1 小时前
【把Linux“聊”明白】自动化构建-make/Makefile详解
linux·服务器·学习·自动化·1024程序员节
一只柠檬新1 小时前
当AI开始读源码,调Bug这件事彻底变了
android·人工智能·ai编程
正经教主1 小时前
【App开发】手机投屏的几种方式(含QtScrcpy)- Android 开发新人指南
android·智能手机