由于产品需求 , 要将一级页面的5个Fragment设置不一样颜色的状态栏; 然后我对着网上的博文抄了一遍 ,发现兼容问题很差 , 要么就是顶部的状态栏没有实现全屏 , 要么就是底部的虚拟按钮遮挡导航栏(华为手机和小米手机), 最后自定义主题和设置xml布局顶部高度来解决了这个问题;
解决方案:
第一步.在values的styles中自定义主题:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/personal_center</item>
<item name="colorPrimaryDark">@color/personal_center</item>
<item name="colorAccent">@color/auxiliary_color</item>
</style>
<style name="YRTranslucentTheme" parent="AppTheme">
</style>
第二步.创建values-v19文件夹和styles.xml:
<style name="YRTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">false</item>
</style>
第三步.创建values-v21文件夹和styles.xml:
<style name="YRTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">false</item>
<!--<item name="android:statusBarColor">@android:color/transparent</item>-->
</style>
第三步.引用主题:
<activity
android:name=".module.homepage.activity.MainActivity"
android:screenOrientation="portrait"
android:theme="@style/YRTranslucentTheme"
android:windowSoftInputMode="stateHidden|adjustPan"/>
第四步.Fragment 状态栏填充颜色:(如果一节界面的头部是轮播图直接预留20dp的高度)
不设置预留高度,状态栏会和toolbar叠加在一起 (状态栏在toolbar上方)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<View
android:id="@+id/view_top"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_alignParentTop="true"
android:background="@color/red"/>
<android.support.v7.widget.Toolbar
android:id="@+id/tb_back"
style="@style/toolbar_state_setting"
android:background="@color/white">
<TextView
style="@style/toolbar_title"
android:text="@string/my_setting"
android:textColor="@color/red"
android:textSize="18dp"/>
</android.support.v7.widget.Toolbar>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:background="@color/white"
android:orientation="vertical">
......
运行后效果图如下:
轮播图在顶部的时候直接预留状态栏的高度即可:
指定颜色的界面设置多一层有颜色的View: