安卓实现沉浸式状态栏(通过theme主题进行设置)

来源:互联网 发布:终结者创世纪知乎 编辑:程序博客网 时间:2024/05/01 20:03

综述:

沉浸式状态栏在许多app中已经被广泛使用了,项目中使用了沉浸式状态栏,有代码设置和theme主题设置两种方式,我的项目是以theme主题的方式来使用的,过程当中也遇到了不少的坑,现在把相关知识点记录下来,以备后期需要的时候使用。

本文章中的沉浸式状态栏,实际上应该表述为透明式状态栏更为准确。


在布局中需要延展到状态栏的控件下添加以下内容,表示保留status栏的空间,否则,布局的内容会挤到状态栏中。

android:fitsSystemWindows="true"


一、在6.0(23)以上:

各个item的用法已经添加了备注

<style name="AppTheme.ImmersiveThemewitletext">        <!-- true: status栏会有一层阴影;false: status栏没有阴影;当该项为true时,则name="android:windowLightStatusBar"设置无效,永远为白色 -->        <item name="android:windowTranslucentStatus">false</item>        <!-- 使底部导航栏透明 -->        <item name="android:windowTranslucentNavigation">true</item>        <!-- 给status栏设置透明颜色 -->        <item name="android:statusBarColor">@android:color/transparent</item>        <!-- true: status栏的图标和文字为黑色;false: sstatus栏的图标和文字为白色 -->        <item name="android:windowLightStatusBar">true</item>    </style>

效果图:



把"android:windowLightStatusBar"项改为“false”:

<style name="AppTheme.ImmersiveThemewitletext">        <!-- true: status栏会有一层阴影;false: status栏没有阴影;当该项为true时,则name="android:windowLightStatusBar"设置无效,永远为白色 -->        <item name="android:windowTranslucentStatus">false</item>        <!-- 使底部导航栏透明 -->        <item name="android:windowTranslucentNavigation">true</item>        <!-- 给status栏设置透明颜色 -->        <item name="android:statusBarColor">@android:color/transparent</item>        <!-- true: status栏的图标和文字为黑色;false: sstatus栏的图标和文字为白色 -->        <item name="android:windowLightStatusBar">false</item>    </style>
效果图:



把"android:windowTranslucentStatus"项改为"true":

    <style name="AppTheme.ImmersiveThemewitletext">        <!-- true: status栏会有一层阴影;false: status栏没有阴影;当该项为true时,则name="android:windowLightStatusBar"设置无效,永远为白色 -->        <item name="android:windowTranslucentStatus">true</item>        <!-- 使底部导航栏透明 -->        <item name="android:windowTranslucentNavigation">true</item>        <!-- 给status栏设置透明颜色 -->        <item name="android:statusBarColor">@android:color/transparent</item>        <!-- true: status栏的图标和文字为黑色;false: sstatus栏的图标和文字为白色 -->        <item name="android:windowLightStatusBar">false</item>    </style>
效果图:



二、在5.0(21)以上:

在5.0版本中,并没有"<itemname="android:statusBarColor">@android:color/transparent</item>"属性。在values-v21下的style.xml中添加如下主题:

    <style name="AppTheme.ImmersiveTheme">        <!-- true: status栏会有一层阴影;false: status栏没有阴影-->        <item name="android:windowTranslucentStatus">false</item>        <!-- 使底部导航栏透明 -->        <item name="android:windowTranslucentNavigation">true</item>        <!-- 给status栏设置透明颜色 -->        <item name="android:statusBarColor">@android:color/transparent</item>    </style>
效果图如下:



把"<itemname="android:windowTranslucentStatus">true</item>"改为true:

    <style name="AppTheme.ImmersiveTheme">        <!-- true: status栏会有一层阴影;false: status栏没有阴影-->        <item name="android:windowTranslucentStatus">true</item>        <!-- 使底部导航栏透明 -->        <item name="android:windowTranslucentNavigation">true</item>        <!-- 给status栏设置透明颜色 -->        <item name="android:statusBarColor">@android:color/transparent</item>    </style>
效果图如下:





三、在4.4(19)以上:

在values-v19文件夹下的styles.xml中添加如下主题

    <style name="AppTheme.ImmersiveThemewitletext">        <item name="android:windowTranslucentNavigation">true</item>        <item name="android:windowTranslucentStatus">true</item>    </style>
由于没有机器及模拟器,没有效果图。







0 0
原创粉丝点击