android沉浸式界面设置,隐藏标题栏,导航栏和底部栏,androidstudio

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

无沉浸效果
在这里插入图片描述

设置沉浸后效果,顶部部件没有紧贴手机界面顶部是因为我设置了marginTop属性
在这里插入图片描述
记得在搜索的时候,得知这种效果似乎是在4.4以后才能实现,然后随着版本的变迁,方法也在改变。我的方法应该在6.0版本以上都通用。
6.0对应API23,首先在Project结构的目录下的res目录里新建values -23目录

在这里插入图片描述
选择Version,然后选择向右的箭头
在这里插入图片描述
输入23,点OK
在这里插入图片描述
创建成功
在这里插入图片描述
再右键,new一个resource文件,命名为styles
在这里插入图片描述
在这里插入图片描述

在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后,弹出键盘的同时会弹出导航栏,而收回键盘后,导航栏不自动收回。暂时想的办法,监听键盘收回操作,收回时调用上述隐藏导航的方法

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值