Android沉浸式状态栏设置

平常在写一个新项目的时候,总是因为设置沉浸式效果而搞了很久,因为网上的很多说法都并不是完全正确,最后不了了之,放任不管去做其他功能了。现在自己记录下来一套正确的设置方法,方便之后的查阅。

(这套设置方法不适合与Toolbar一起使用,如果Activity中使用到了Toolbar,还是另寻他法吧。。。)

第一步:在Activity的onCreate方法中加入下面这行代码

supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
复制代码

这行代码要在super.onCreate(savedInstanceState);之前调用,不然会报错

第二步:自定义一个沉浸式主题

<style name="ImmersiveTheme" parent="(application所使用的全局主题名称)">
    <item name="windowNoTitle">true</item>
    <!-- 下面两条属性是Android 4.4版本以上才能设置 -->
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
    <!-- 下面这条属性是Android 5.0版本以上才能设置 -->
    <!-- 从Android 5.0开始需要把颜色设置为透明,否则导航栏会呈现系统默认的浅灰色 -->
    <item name="android:statusBarColor">@android:color/transparent</item>
</style>
复制代码

第三步:在Activity的xml文件中设置android:fitsSystemWindows=”true”

<LinearLayout
    ......
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        ......
        android:fitsSystemWindows="true">
        ......
    </LinearLayout>
    <TextView
        ......
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        ......
    </TextView>
</LinearLayout>
复制代码

在所有可以接触到状态栏的二级标签中设置属性android:fitsSystemWindows="true",注意不要在根标签中设置该属性

第四步:在AndroidManifest.xml中设置沉浸式主题

<!-- 全局设置 -->
<application
        ......
        android:theme="@style/ImmersiveTheme">
        ......
</application>

<!-- Activity设置 -->
<activity
    ......
    android:theme="@style/ImmersiveTheme">
    ......
</activity>
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享