• Android SystemUI setSystemUiVisibility()参数Flag详解


    1:相关 Flag 特性详解 

    View.SYSTEM_UI_FLAG_LAYOUT_STABLE

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

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

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

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

      使用SYSTEM_UI_FLAG_LAYOUT_STABLE的作用,就是当StatusBarNavigationBar的显示和隐藏,系统为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=trueview,会被系统自动添加大小为statusBarActionBar高度之和相同的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=trueview,会被系统自动添加大小为NavigationBar高度相同的paddingBottom。当window设置WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION时,此Flag会被系统会自动添加。

     

    4:相关 Flag 特性详解 

    View.SYSTEM_UI_FLAG_IMMERSIVE

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

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

  • 相关阅读:
    Vim编辑器使用入门
    Oracle数据库体系结构简介
    100天精通Golang(基础入门篇)——第19天:深入剖析Go语言中方法(Method)的妙用与实践
    k8s部署服务+日志收集+监控系统+CICD自动化
    web网页设计期末课程大作业:美食餐饮文化主题网站设计——美食汇5页HTML+CSS+JavaScript
    面试题-多线程-Java 如何实现多线程之间的通讯和协作
    vs2019快捷键注释不起作用
    WorldCoin 运营数据,业务安全分析
    LCD1602
    第63篇 QML 之 JS中的代码块、条件语句
  • 原文地址:https://blog.csdn.net/MLQ8087/article/details/134014979