• android状态栏和NavigationBar的动态控制显示


    项目在开发阅读器,阅读器对阅读界面的要求就是在工具栏不显示的状态下,ActionBar和NavigationBar都是不显示的,当工具栏显示时它们都出来,这就需要动态控制它们的显示与隐藏。

    第一阶段:没有考虑NavigationBar的情况,单纯控制ActionBar的显示与隐藏

    private void full(boolean enable) {
            if (enable) {
                WindowManager.LayoutParams lp = getWindow().getAttributes();
                lp.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
                getWindow().setAttributes(lp);
                getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
            } else {
                WindowManager.LayoutParams attr = getWindow().getAttributes();
                attr.flags &= (~WindowManager.LayoutParams.FLAG_FULLSCREEN);
                getWindow().setAttributes(attr);
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
            }
        }

    第二阶段:测试发现华为手机NavigationBar会影响使用,开始动态设置ActionBar和NavigationBar的隐藏与显示

    private void full(boolean enable) {
            if (enable) {
                if (Build.VERSION.SDK_INT >= 19) {
                    getWindow().getDecorView().setSystemUiVisibility(
                            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
                }
            } else {
                if (Build.VERSION.SDK_INT >= 19) {
                    getWindow().getDecorView().setSystemUiVisibility(
                            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
                }
            }

    上面讲实现,再来看看用法:

    android想要应用运行时全屏有一种方法是在activity的onCreat方法中加入如下代码:getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
    WindowManager.LayoutParams.FLAG_FULLSCREEN);并且需要在setContentView()之前,否则无效过。从这么多的苛刻条件可以看出这种方法无法满足动态控制。

    下面的方法可以满足这个需要。调用View的 setSystemUiVisibility()

    方法,其参数如下:

     1     View.SYSTEM_UI_FLAG_VISIBLE, //显示状态栏,Activity不全屏显示(恢复到有状态的正常情况)。
     2 
     3     View.INVISIBLE, //隐藏状态栏,同时Activity会伸展全屏显示。
     4 
     5     View.SYSTEM_UI_FLAG_FULLSCREEN ,  //Activity全屏显示,且状态栏被隐藏覆盖掉。
     6 
     7     View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN, //Activity全屏显示,但状态栏不会被隐藏覆盖,状态栏依然可见,Activity顶端布局部分会被状态遮住。
     8 
     9     View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION, //效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    10 
    11     View.SYSTEM_UI_LAYOUT_FLAGS, //效果同View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
    12 
    13     View.SYSTEM_UI_FLAG_HIDE_NAVIGATION, //隐藏虚拟按键(导航栏)。有些手机会用虚拟按键来代替物理按键。
    14 
    15     View.SYSTEM_UI_FLAG_LOW_PROFILE,  //状态栏显示处于低能显示状态(low profile模式),状态栏上一些图标显示会被隐藏。

    Color:

    Android design theme color

    <style name="AppTheme.NoActionBar">
        <!--状态栏颜色-->
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <!--控制各个控件被选中时的颜色-->
        <item name="colorAccent">@color/colorAccent</item>
        <!--页面背景色-->
        <item name="android:windowBackground">@color/windowBackg</item>
        <!--底部导航栏颜色-->
        <item name="android:navigationBarColor">@color/navigationColor</item>
        <!--Appbar背景色-->
        <item name="android:colorPrimary">@color/colorPrimary</item>
        <!--ToolBar上的Title颜色-->
        <item name="android:textColorPrimary">@color/textColorPrimary</item>
        <!--各个控制控件的默认颜色-->
        <item name="android:colorControlNormal">@color/colorControlNormal</item>
    </style>

     网文参考:

    Android状态栏微技巧,动态控制状态栏显示和隐藏

  • 相关阅读:
    读写文件流
    关闭和退出窗口
    有什么问题?
    将aspx页面转换成htm页面
    读取rss聚合文件
    运算符重载实例
    委托
    将 Visual Studio .NET 调试器用于 ASP.NET 应用程序
    输入的字符串进行有规则的清洗
    几个常用的数据库连接字符串
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/8477642.html
Copyright © 2020-2023  润新知