Android kitkat 有一个新的特性可以设置手机状态栏的背景,这样就能与Activity的风格保持一致。
下面我们用SystemBarTintManager来实现这个效果,先上效果图:
SystemBarTintManager是github上的一个开源项目,有兴趣的可以自己去研究下源码。源码
把这个功能简单的封装成了TitleUtil,下面直接上代码:
package com.ybws.systembartintdemo;
import android.annotation.TargetApi;
import android.app.Activity;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.view.Window;
import android.view.WindowManager;
import com.readystatesoftware.systembartint.SystemBarTintManager;
/**
* Created by lzh on 2016/1/14.
*/
public class TitleUtil {
private Activity mActivity;
public TitleUtil(Activity activity) {
mActivity = activity;
}
public void initTitleResource(int resource) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(mActivity);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(resource);//通知栏所需颜色
}
public void initTitleColor(int color) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(mActivity);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintColor(color);//通知栏所需颜色
}
public void initTitleDrawable(Drawable drawable) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
setTranslucentStatus(true);
}
SystemBarTintManager tintManager = new SystemBarTintManager(mActivity);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintDrawable(drawable);
}
@TargetApi(19)
public void setTranslucentStatus(boolean on) {
Window win = mActivity.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);
}
}
Activity代码:
package com.ybws.systembartintdemo;
import android.app.Activity;
import android.os.Bundle;
public class MainActivity extends Activity {
private TitleUtil titleUtil;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
titleUtil = new TitleUtil(this);
titleUtil.initTitleResource(R.color.circle);
}
}
界面如下:
可以看到布局被系统栏覆盖,以至于TextView一部分文字没有显示出来,只要在布局文件中加上android:fitsSystemWindows=”true”这样就能使布局不被系统栏覆盖了。