• 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状态栏微技巧,动态控制状态栏显示和隐藏

  • 相关阅读:
    350. Intersection of Two Arrays II
    94. Binary Tree Inorder Traversal
    623. Add One Row to Tree
    JS判断是否为数字,中文,小写、大写字母
    ASP.NET 操作Cookie详解 增加,修改,删除
    ASP.NET MVC 入门1、简介
    通过LINQ TO SQL类显示数据库表的数据
    OutputCache缓存优化asp.net代码 提高网页性能
    数据库读取二进制图片显示到PictureBox中
    WinForm窗体间如何传值的几种方法
  • 原文地址:https://www.cnblogs.com/aimqqroad-13/p/8477642.html
Copyright © 2020-2023  润新知