Translucent System Bar 半透明状态栏的使用
一起源 在Android 4.4之后便引入了半透明状态栏的概念,此时状态栏最顶层有一层阴影,也就是平时我们所说的渐变效果。而在5.0以上谷歌又做了调整,不仅支持设置渐变效果,还是支持设置完全纯色的效果。 二分类分为两种 1适合没有导航栏 toolBar actionBar 的背景显示一张图片 包括状态栏效果如下 2是把状态栏 和toolbar设置成一样的颜色 如QQ音乐 三实现 主要设置values里的style 然后设置给activity的theme 1 图片背景的 为了适配多种安卓版本 分别创建三种资源 在values、values-v19、values-v21的style.xml都设置一个 Translucent System Bar 风格的Theme values/style.xml<style name="ImageTranslucentTheme" parent="AppTheme">values-v19/style.xml
<!--在Android 4.4之前的版本上运行,直接跟随系统主题-->
</style>
<style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">values-v21/style.xml
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
<style name="ImageTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">然后在AndroidManifest.xml中对指定Activity的theme进行设置
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<!--Android 5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色-->
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
<activity在该Activity的布局文件中设置背景图片,同时,需要把android:fitsSystemWindows设置为true android:fitsSystemWindows="true"必须设置
android:name=".ui.ImageTranslucentBarActivity"
android:label="@string/image_translucent_bar"
android:theme="@style/ImageTranslucentTheme" />
<?xml version="1.0" encoding="utf-8"?>效果:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@mipmap/env_bg"
android:fitsSystemWindows="true">
</RelativeLayout>
使用带有ToolBar的设置和状态栏一样的颜色 类似QQ音乐 只需要修改values_v21/style.xml其他资源包下的还是一样的
<style name="ColorTranslucentTheme" parent="Theme.AppCompat.Light.NoActionBar">然后去toolBar布局设置toolBar的颜色 和上边状态栏颜色一致 android:fitsSystemWindows="true"放最外层 toolBar的颜色也为color_green
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@color/color_green</item>
</style>
<FrameLayout效果:
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.wbxu.mymaterialdemo.MainActivity"
android:fitsSystemWindows="true"
>
<!--android:background="@drawable/a"-->
<android.support.v7.widget.Toolbar
android:id="@+id/toolBar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/color_green"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
app:popupTheme="@style/ToolbarPopupTheme"
>
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</android.support.v7.widget.Toolbar>
</FrameLayout>
四总结: 方式一适用于app中没有导航栏,且整体的背景是一张图片的界面;
方式二适用于app中导航栏颜色为纯色的界面;
android:fitsSystemWindows设置要在布局文件中,不要到theme中设置;