什么是沉浸式状态栏
Android从4.4开始支持这种显示效果,直接看对比图:
从上图可以看到左边淘宝APP最顶部的状态栏背景是黑色的,而右边的360手机助手那个位置不是黑色,就是用了沉浸式状态栏这种效果。
SystemBarTint的使用
那么如何给应用加上这种效果呢?
SystemBarTint是两年以前的一个开源库,现在我们依然可以用它很方便的给应用加上。
下面以Eclipse项目为例:
1、导入jar包
把下载的jar包复制到我们项目的libs文件夹下
2、xml布局文件修改
在Activity的布局文件里的顶层布局加两行代码,如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}"
android:fitsSystemWindows="true"
android:clipToPadding="false" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
可以看到,主要是加上了这两行代码
android:fitsSystemWindows="true"
android:clipToPadding="false"
上面的第一行代码fitsSystemWindows的作用是:
让view可以根据系统窗口(如status bar)来调整自己的布局,如果值为true,就会调整view的paingding属性来给system windows留出空间。
第二行代码clipToPadding 值控件的绘制区域是否在padding里面的,默认是true,设置成false就表示可已在控件外面显示。
3、Activity代码更改
直接看代码:
package com.example.systembartintexample;
import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
import android.view.Window;
import android.view.WindowManager;
import com.readystatesoftware.systembartint.SystemBarTintManager;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 4.4及以上版本开启
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(this);
tintManager.setStatusBarTintEnabled(true);
tintManager.setNavigationBarTintEnabled(true);
// 自定义颜色
tintManager.setTintColor(Color.parseColor("#24b7a4"));
}
@TargetApi(19)
private void setTranslucentStatus(boolean on) {
Window win = getWindow();
WindowManager.LayoutParams winParams = win.getAttributes();
final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
if (on) {
winParams.flags |= bits;
} else {
winParams.flags &= ~bits;
}
win.setAttributes(winParams);
}
}
从上面代码可以看到:
第21行开始,判断一下当前设备版本号,4.4以上就开启。
第25行新建SystemBarTintManager,下面两行分别是开启状态栏和导航栏染色。
第30行可以设置显示的自定义颜色,不设置的话,默认是个浅灰色。
重点说一下setTranslucentStatus方法,首先得到我们应用的窗口布局,如果设置了显示状态栏染色的话,窗口的flag就会设置成FLAG_TRANSLUCENT_STATUS,应用所占的屏幕会扩大到全屏,这样的话,就必须让内容向下错出一个状态栏的高度。
4、效果
经过上述3个步骤,我们看到效果了,如下:
最后附上:
SystemBarTint开源库地址(需要Android studio导入运行):点击浏览
Eclipse版本DEMO地址: 点击下载