java代码设置状态栏颜色_Android开发模版代码(4)——状态栏设置

下面的代码是基于开源项目SystemBarTint,我们需要添加其依赖

compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'

下面的代码,我在类原生的Android7.0系统测试通过,其他的国产ROM系统未进行测试

设置状态栏白色

1. 设置主题theme

在AndroidManifest文件中,设置theme

eccd219533dcb43125c971359584ead3.png

按住Ctrl,点开那个theme,修改theme

0b32b5e1e602e974f82cd31543371fb9.png

2. 设置xml文件

之后在xml文件中的根节点,添加属性android:fitsSystemWindows="true",同时,把背景颜色设置为白色(这一步背景色可以不设置,我的项目整体是白色的,看你需求)

59a4f1d2b0cf031f844fd682a20a7a89.png

3. 添加代码

下面的是把状态栏设置为白色,字体和图标颜色设置为黑色的代码,复制一份,之后Activity对应的java文件中的setContentView之前调用setWhiteBar(this)方法即可

我是把下面的代码封装到了一个状态栏工具类,之后调用

public static void setWhiteBar(Activity activity) {

//设置状态栏为全透明

transparencyBar(activity);

//设置状态栏为白色

SystemBarTintManager tintManager = new SystemBarTintManager(activity);

tintManager.setStatusBarTintEnabled(true);

tintManager.setStatusBarTintResource(R.color.color_white);

//设置状态栏字体和图标为黑色

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

}

}

/**

* 修改状态栏为全透明

*

* @param activity

*/

@TargetApi(19)

public static void transparencyBar(Activity activity) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window = activity.getWindow();

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(Color.TRANSPARENT);

} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

Window window = activity.getWindow();

window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

}

}

Activity.java

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

StatusBarUtil.setWhiteBar(this);

setContentView(R.layout.activity_main);

}

其他补充

改变状态栏颜色

如果是单纯地改变状态栏颜色,只需要使用下面的方法即可

@TargetApi(Build.VERSION_CODES.LOLLIPOP)

public static void setStatusBarColor(int statusColor, Activity activity) {

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window = activity.getWindow();

//取消设置Window半透明的Flag

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

//添加Flag把状态栏设为可绘制模式

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

//设置状态栏颜色

window.setStatusBarColor(statusColor);

}

}

动态设置状态栏字体颜色

可以通过设置一个boolean,来判断当前状态栏的颜色是否为亮色,如果为亮色,则设置为黑色图标,如果为暗色,则设置为白色图标

boolean isLightColor;

int color= Color.parseColor("#f0f0f0");

double v = ColorUtils.calculateLuminance(color);

//判断颜色亮色

if(v>=0.5){

isLightColor = true;

}else{

isLightColor = false;

}

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

if(isLightColor){

//设置黑色字体颜色

activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

}else{

//设置白色字体颜色

activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值