在学习制作一个本地音乐播放器时,尝试做出沉浸式界面效果,查看了网上很多方法,感觉都不完善,调试了半天,意外获得了自己想要的效果,便想记录下来。

无沉浸效果

android 不隐藏界面 安卓隐藏界面_沉浸式

设置沉浸后效果,顶部部件没有紧贴手机界面顶部是因为我设置了marginTop属性

android 不隐藏界面 安卓隐藏界面_沉浸式_02


记得在搜索的时候,得知这种效果似乎是在4.4以后才能实现,然后随着版本的变迁,方法也在改变。我的方法应该在6.0版本以上都通用。

6.0对应API23,首先在Project结构的目录下的res目录里新建values -23目录

android 不隐藏界面 安卓隐藏界面_沉浸式_03


选择Version,然后选择向右的箭头

android 不隐藏界面 安卓隐藏界面_隐藏底部栏_04


输入23,点OK

android 不隐藏界面 安卓隐藏界面_android_05


创建成功

android 不隐藏界面 安卓隐藏界面_android_06


再右键,new一个resource文件,命名为styles

android 不隐藏界面 安卓隐藏界面_android 不隐藏界面_07


android 不隐藏界面 安卓隐藏界面_android 不隐藏界面_08

在values-23的styles中加入如下代码,自定义主题样式,继承了无标题栏样式,将导航栏设置为透明等等,具体各个属性的作用,还有待进一步探究

<?xml version="1.0" encoding="utf-8"?>
<resources>



    <style name="AppTheme.Main" parent="Theme.AppCompat.Light.NoActionBar">

        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
    </style>


</resources>

然后在Androimanifest文件里对需要设置为沉浸式界面对应Activity设置theme属性

<activity
            android:name=".MainActivity"
            android:theme="@style/AppTheme.Main" />

然后在Activity中添加如下隐藏导航栏的方法,在oncreate方法里调用一次,然后在有需要的地方也可以调用

//隐藏导航栏
    protected void hideBottomUIMenu() {
        //隐藏虚拟按键,并且全屏
        if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
            View v = this.getWindow().getDecorView();
            v.setSystemUiVisibility(View.GONE);
        } else if (Build.VERSION.SDK_INT >= 19) {
            //for new api versions.
            View decorView = getWindow().getDecorView();
            int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN;
            decorView.setSystemUiVisibility(uiOptions);
        }
    }

最后在对应的layout文件里对次一级布局添加如下属性,若对顶层布局设置便不起作用,不知为啥。别忘了为顶层布局设置合适的背景达成沉浸目的。

android:fitsSystemWindows="true"

目前问题是在点击edittext后,弹出键盘的同时会弹出导航栏,而收回键盘后,导航栏不自动收回。暂时想的办法,监听键盘收回操作,收回时调用上述隐藏导航的方法