Android 详细讲解修改app状态栏颜色

本文介绍了在Android开发中如何动态地改变应用顶部状态栏的颜色,适用于API level 21及以上版本。通过设置Window的属性,可以实现状态栏颜色与应用主题色一致,提供了具体的代码示例和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       相信很多人在开发app的时候,都会碰到xml中header的状态栏颜色和系统手机自带的颜色(顶部手机状态条)不一致,查了好多资料;例如:去掉状态栏以及全屏显示等,可以参考下面这篇文章

Android简单粗暴去掉状态栏以及全屏

这里总结另外一种方法(actionBar已经去掉了,动态修改顶部手机状态条):

先上图,看看使用前后的区别

图1.

图2.

解决办法:

/**
 * @author Martin-harry
 * @date 2021/8/10
 * @address
 * @Desc 系统状态栏颜色
 */
public class StatusBarUtils {

    public static void setWindowStatusBarColor(Activity activity, int colorResId) {
        try {
            //获取sdk的api,如果大于等于5.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = activity.getWindow();
                window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//状态栏颜色(6.0以上才可以)
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(activity.getResources().getColor(colorResId));
                //底部导航栏
                //window.setNavigationBarColor(activity.getResources().getColor(colorResId));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setWindowStatusBarColorText(Activity activity, int colorResId) {
        try {
            //获取sdk的api,如果大于等于5.0
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = activity.getWindow();
//                    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR);//状态栏颜色(6.0以上才可以)
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(activity.getResources().getColor(colorResId));
                //底部导航栏
                //window.setNavigationBarColor(activity.getResources().getColor(colorResId));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void setWindowStatusBarColor(Dialog dialog, int colorResId) {
        try {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                Window window = dialog.getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(dialog.getContext().getResources().getColor(colorResId));
                window.setNavigationBarColor(Color.TRANSPARENT);
                //底部导航栏
                //window.setNavigationBarColor(activity.getResources().getColor(colorResId));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

具体使用方法:

       调用这个StatusBarUtils 可以在自己封装的activity基类里面去调用,或者全局的application中去写,代码如下:

//设置状态栏颜色 根据自己的需求去写
public void setStatusBg(int i){
        if(i == 1){
            StatusBarUtils.setWindowStatusBarColor(this, R.color.sliver);//设置状态栏颜色为银白色
        }else if(i == 2){
            StatusBarUtils.setWindowStatusBarColorText(this, R.color.white);//设置状态栏颜色为白色
        }else if(i == 3){
            StatusBarUtils.setWindowStatusBarColor(this, R.color.colorAccent);//设置状态栏颜色为绿色
        }else if(i == 4){
            StatusBarUtils.setWindowStatusBarColor(this, R.color.splashColr);//设置状态栏颜色为印度红色
        }
    }

下面是我自己调用的过程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拉莫帅

你的鼓励将是我的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值