在android4.4之前,状态栏一直都是黑色的,在android4.4引入了windowTranslucentStatus属性,使开发者可以实现给状态栏设置颜色,如下图所示:
实现透明状态栏和导航栏可以通过java代码和设置主题两种方式:
方式一:在代码中设置
protected void setStatusBarTranslation() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 设置状态栏透明
getWindow().setStatusBarColor(getResources().getColor(R.color.transparent));
//设置导航栏透明
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 设置状态栏透明
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//设置导航栏透明
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
方式二:在主题中设置
在res文件夹下添加values-v19、values-v21两个文件夹,并在文件夹内新建styles文件,在需要设置透明状态栏和导航栏的activity对应主题下添加如下代码:
values-v19/styles.xml:
values-v21/styles.xml:
注意:需要在values/styles.xml下添加一个相同名称的主题避免程序报错
通过这两种方式中的一种就可以将状态栏和导航栏设置为透明了。
下面就可以开始为状态栏和导航栏进行着色了:
为状态栏和导航栏着色一般有以下几种情况:
一.全屏图片延伸至状态栏和导航栏
如果想要将图片延伸到状态栏和导航栏,直接通过上面两种方式中的一种将状态栏和导航栏设置为透明就可以了,不需要进行其他设置,布局文件和效果如下:
<?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">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@mipmap/splash" />
</LinearLayout>