1.要求状态栏透明,我们的内容布局延伸到系统状态栏,就是人们口中说的沉浸式状态栏:
Android 5.0 及其以后版本:设置属性 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 使得我们的内容布局可以延伸到系统状态栏,然后直接使用方法 setStatusBarColor() 把系统状态栏设置成透明就好了。
Android 4.4 ~ Android 5.0 :添加了属性 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS) 可以让状态栏变成透明,并且使我们们的内容布局延伸到系统状态栏。这个属性虽然也可以在 Android 5.0 及其以后版本的手机上使用,但是效果不是我们想要的。
在 Android 4.4 之前是不支持透明状态栏
需要注意的一点是在设置透明状态栏的情况下,是需要我们的内容布局延伸到状态栏的,因此这个时候使用 fitSystemWindows 这个属性是没有意义的,只会使得出现各种奇葩的效果。
2.状态栏颜色和我们布局颜色搭配其实在有的时候,我们是不需要把我们的内容布局延伸到系统状态栏的,只是需要系统状态栏和我们的内容布局的颜色搭配起来。
Android 5.0 及其以后版本:直接通过 setStatusBarColor() 或者 修改colorPrimaryDark 对应的颜色,把系统状态栏颜色设置成搭配的颜色就可以了
Android 4.4 ~ Android 5.0:这个版本其实是不允许直接修改状态栏的颜色的,只不过我们利用了一种巧妙的方法,感觉是修改了状态栏的颜色而已。通过 getWindow().addFlags(WindowManager.LayoutParams.FALG_TRANSLUCENT_STATUS) 是状态栏透明,并且我们的布局也会延伸到状态栏,给我们的内容布局设置一个 padding,给这个 padding 设置一个合适的颜色来充当系统状态栏的颜色就可以了。
Android 4.4 之前是不支持修改的
其实状态栏的适配无外乎这两点了,注意一定要针对不同的 Android 版本使用不同的方法,不可乱用,不可混用,不然会有各种奇葩效果!
效果图 Android 4.4 以前状态栏永远是黑底白字,没有方法改变。上面的所有的方法也是不适用的。
Android 4.4~Android 5.0Android 4.4 引入了 FLAG_TRANSLUCENT_STATUS 这种模式,使用这种模式可以使内容布局占据状态栏,效果:
android:fitsSystemWindows = "true" 属性 可以理解为给所使用的布局设置了状态栏大小的 padding。只会作用于 Toolbar 和 根布局。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:background="@color/main_green_00b661" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- <android.support.v7.widget.Toolbar android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/tb" app:title="@string/activity_status_bar" app:titleTextColor="@android:color/white" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" android:background="@color/colorAccent"> </android.support.v7.widget.Toolbar>--> <TextView android:fitsSystemWindows="true" android:background="@color/main_green_00b661" android:layout_width="match_parent" android:layout_height="1dp" android:text="11" android:textColor="#000"/> <ImageView android:contentDescription="@string/text_input" android:id="@+id/iv" android:scaleType="fitXY" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:src="@mipmap/imga"/> <TextView android:background="@color/colorAccent" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="11" android:textColor="#000"/> </LinearLayout> 比如,布局是这样的,fitsSystemWindows 只有在根布局 LinearLayout 或者 ToolBar 上有用,在别的 View 上使用是没有效果的。LinearLayout 使用 fitsSystemWindows
ToolBar 设置 fitsSystemWindows 效果