修改状态栏字体颜色

修改 StatusBar 控件的背景色 Option   Explicit     Private   Const   CLR_INVALID   =   &HFFFF     Private   Const   SB_SETBKCOLOR   =   &H2001     Private   Declare   Function   SendMessage   Lib   "user32"   Alias   "SendMessage 阅读详情

在APP开发过程中,越来越多的APP要求状态栏的颜色可以动态变化,但是一旦有要求状态栏颜色为白色的话,很多小伙伴就开始发愁,因为系统本身的状态栏颜色的字体就是白色的,一旦状态栏白色就看不到文字了

今天,讲的就是如何修改状态栏的字体颜色为白色

第一步:

将主题颜色设置为白色,只需要在APPtheme里面修改即可,也就是修改color文件下的颜色

 

此时主题已经是白色,接下来就是修改状态栏文字的颜色为黑色

先上一个工具类:

public class StatusBarUtil {
    /**
     * 修改状态栏为全透明
     *
     * @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);
        }


    }

    /**
     * 修改状态栏颜色,支持4.4以上版本
     *
     * @param activity
     * @param colorId
     */
    public static void setStatusBarColor(Activity activity, int colorId) {

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            Window window = activity.getWindow();
            //window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            //window.getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            window.setStatusBarColor(activity.getResources().getColor(colorId));

        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            //使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明
            transparencyBar(activity);
            SystemBarTintManager tintManager = new SystemBarTintManager(activity);
            tintManager.setStatusBarTintEnabled(true);
            tintManager.setStatusBarTintResource(colorId);
        }
    }

    /**
     * 状态栏亮色模式,设置状态栏黑色文字、图标,
     * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
     *
     * @param activity
     * @return 1:MIUUI 2:Flyme 3:android6.0
     */
    public static int statusBarLightMode(Activity activity) {
        int result = 0;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
            if (MIUISetStatusBarLightMode(activity, true)) {
                result = 1;
            } else if (FlymeSetStatusBarLightMode(activity.getWindow(), true)) {
                result = 2;
            } else {
                activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                result = 3;
            }
        }
        return result;
    }

    /**
     * 设置状态栏图标为深色和魅族特定的文字风格
     * 可以用来判断是否为Flyme用户
     *
     * @param window 需要设置的窗口
     * @param dark   是否把状态栏文字及图标颜色设置为深色
     * @return boolean 成功执行返回true
     */
    public static boolean FlymeSetStatusBarLightMode(Window window, boolean dark) {
        boolean result = false;
        if (window != null) {
            try {
                WindowManager.LayoutParams lp = window.getAttributes();
                Field darkFlag = WindowManager.LayoutParams.class
                        .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON");
                Field meizuFlags = WindowManager.LayoutParams.class
                        .getDeclaredField("meizuFlags");
                darkFlag.setAccessible(true);
                meizuFlags.setAccessible(true);
                int bit = darkFlag.getInt(null);
                int value = meizuFlags.getInt(lp);
                if (dark) {
                    value |= bit;
                } else {
                    value &= ~bit;
                }
                meizuFlags.setInt(lp, value);
                window.setAttributes(lp);
                result = true;
            } catch (Exception e) {

            }
        }
        return result;
    }

    /**
     * 需要MIUIV6以上
     *
     * @param activity
     * @param dark     是否把状态栏文字及图标颜色设置为深色
     * @return boolean 成功执行返回true
     */
    public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {
        boolean result = false;
        Window window = activity.getWindow();
        if (window != null) {
            Class clazz = window.getClass();
            try {
                int darkModeFlag = 0;
                Class layoutParams = Class.forName("android.view.MiuiWindowManager$LayoutParams");
                Field field = layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE");
                darkModeFlag = field.getInt(layoutParams);
                Method extraFlagField = clazz.getMethod("setExtraFlags", int.class, int.class);
                if (dark) {
                    extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体
                } else {
                    extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体
                }
                result = true;

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    //开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
                    if (dark) {
                        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
                    } else {
                        activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
                    }
                }
            } catch (Exception e) {

            }
        }
        return result;
    }
}

然后在baseActivity/baseFragment中调用

StatusBarUtil.statusBarLightMode(getActivity());

如图,我的是在baseFragment中调用的,显示效果如下

效果比较简陋,还望大家不要吐槽,如果觉得好的可以点个赞,收藏一下,谢谢。

如果想用,但是遇到问题的,也可以给我留言,共同学习与进步

DevExpress学习(一)——创建Ribbon Form风格界面 一、创建Ribbon风格窗体 1选择Template Gallery 2选择Ribbon Form 添加完生成Ribbon Form如下图 二、为Ribbon Form上红色虚线方框位置添加元素 鼠标右键点击红色虚线方框的位置可以弹出该处可添加的元素列表,直接选择所需内容即可,如下图 1、BarButtonItem添加一个按钮,通常实现Click事件完成一定任务 2、Ba... 阅读详情

相关推荐

Flutter 修改状态栏字体颜色

Flutter 修改状态栏字体颜色欢迎使用Markdown编辑器新的改变 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 // An highlighted block var foo = 'bar'; ...

cilps的博客 954

设置status bar字体颜色的优化方案

因为View controller-based status bar appearance 设为YES 后, 如果vc属于Nav,VC状态栏的设置就被nav截获了,不能直接控制。所以这种方式不好用。 优化的解决方案是: View controller-based status bar appearance 设为NO, 在每个vc中用: [UIApplication sharedA

gaoyp的专栏 1827

精彩编程与编程技巧-设定StatusBar的文字成不同的颜色...

精彩编程与编程技巧-设定StatusBar的文字成不同的颜色 ...

改变状态栏(StatusBar)的颜色

全局修改状态栏的颜色 默认的情况下statusBar的颜色显示为黑色,如果我们想改为白色,那么可以如下操作: 1)打开项目的plist文件,设置View controller-based status bar appearance" 为 NO

欢迎来到Jack的程序世界 8806

【智慧城市】GIS数据获取-获取道路/水路数据

【GIS数据获取】获取道路/水路数据

qq_16599281的博客 4749

Unity中USD场景导入与工业级协作实战指南

USD(Universal Scene Description)是一种面向复杂三维场景的结构化数据模型,其核心在于分层描述、变体管理与非破坏性组合,本质是支持多团队并行协作的场景协议。它不同于传统模型格式,强调运行时可编辑性与版本可控性,技术价值体现在跨软件资产一致性、零拷贝动态叠加及内存中实时合成。典型应用场景包括建筑BIM实时漫游、汽车多配置仿真、影视级灯光材质协同等工业管线。在Unity中,USD已深度集成于URP/HDRP管线,通过原生USD Importer、Runtime与Exporter三组件

weixin_32073537的博客 300

StatusBar之自定义状态栏颜色

最近看了很多关于状态栏的问题的处理,另外很多产品需求状态栏一体化,有时候可能需要去设置一下状态栏的颜色,本例子可以方便的自定义状态栏颜色,按照需要随意更改下面是我总结出处理状态栏颜色的设置,这里说的都是自定义的toolbar,我这里已经把titlebar给隐藏掉了 (1) 关于5.0一下:首先我们需要在res文件下的style中设置: style name="AppTheme" paren

时代新人的博客 2293

LibTV保姆级教程:从提示词到AI视频成片全流程

AI视频生成技术正以前所未有的速度重塑内容创作行业,过去需要编剧、摄影、剪辑等多角色协作的复杂流程,如今借助AI绘画与图生视频等核心能力,一个人也能完成高质量短视频制作。理解提示词工程是掌控AI视频创作的关键,通过精准描述主体、环境、光线与运镜,可以显著提升生成画面的稳定性与专业度。而图生视频技术则让静态分镜自然流动,有效解决角色一致性与场景漂移等常见问题。这类工具已广泛应用于产品宣传、剧情短片、社交媒体内容生产等场景,大幅降低了视频创作门槛。本文以LibTV一站式AI视频创作平台为例,从核心概念到完整实操

weixin_29046035的博客 939

android 修改状态栏颜色和状态栏图标字体颜色

1.修改状态栏颜色,即修改application主题theme或者activity主题theme values/styles/ <!--状态栏颜色 样式 --> <style name="TranslucentTheme" parent="AppTheme"> </style> values-v19/styles <style n...

yangaiyu的博客 7365

小鹏P7车载以太网诊断实战:从OBD口定义到DoIP协议验证

本文详细解析了小鹏P7车载以太网诊断的实战过程。从OBD接口的针脚定义入手,依据ISO13400标准,确认了以太网线对位置,并指导制作专用的RJ45转OBD线束。通过搭建测试环境,使用Ping、端口扫描及Wireshark抓包,最终成功验证了车辆对DoIP协议的支持,为基于以太网的高速诊断与刷写提供了完整的技术路径。

CAT789的专栏 521

二叉树随机漫步

元旦快乐! 学习到中本聪bitcoin的文章的calculation部分的时候,出现了binomial random walk,不是很明白什么是random walk。发现这个文章写的很好:https://blog.csdn.net/fireguard/article/details/16111603 随机漫步,也叫随机游走,最早是物理学中做"布朗运动"的微观粒子的运动形态来形成的一个模型,布朗运...

gjq5464的博客 1737

swift修改状态栏背景颜色与字体颜色

状态栏中可设置的颜色有背景颜色和字体颜色 修改状态栏中背景颜色: extension UIApplication { class var statusBarBackgroundColor: UIColor? { get { if #available(iOS 13.0, *) { let statusBar = UIView(frame: UIApplication.shared.keyWindow?.windowScene?.statusBarMa

wwOok 2495

VMware Converter 6.2.0保姆级教程:从物理机到ESXi主机的完整迁移指南(含常见错误排查)

本文提供VMware Converter 6.2.0从物理机迁移至ESXi主机的完整保姆级教程。详细解析了迁移前的环境规划、核心转换过程步骤、版本差异对比,并重点针对代理安装失败、任务卡顿、虚拟机无法启动等常见错误提供了实战排查与解决方案,确保P2V迁移顺利进行。

sam99的博客 380

Android设置状态栏字体深色,Android实现修改状态栏背景、字体和图标颜色的方法...

搜索热词前言:Android开发,对于状态栏的修改,实在是不友好,没什么api可以用,不像ios那么方便.但是ui又喜欢只搞ios一套.没办法.各种翻源码,写反射.真的蛋疼.需求场景:当toolbar及状态栏需要为白色或浅色时(如简书),状态栏由于用的Light风格Theme,字体,图标也都是白色,会看不清.如果改变成黑色就很和谐了.一.修改状态栏颜色:传送门实现的效果:这种方法实现的状态栏变色,...

weixin_33248912的博客 2414

SecureCRT串口连接保姆级教程:从驱动安装到波特率设置(附常见问题解决)

本文提供SecureCRT串口连接的保姆级教程,涵盖从USB转串口驱动安装、端口识别到波特率等核心参数设置的完整流程。针对连接失败、乱码、键盘输入无响应等高频问题,给出了深度排查与解决方案,帮助网络与嵌入式开发新手快速掌握串口调试技能。

weixin_29281941的博客 433

【NodeRed】node-red-contrib-opcua实现PLC读写

在之前的博文【Node-RED】node-red-contrib-opcua-server模块使用(1)中,我们介绍了用node-red-contrib-opcua-server模块实现OPCUA服务端的,以及二次开发的内容。本节博文中我们采用官方社区自带的node-red-contrib-opcua组件开展对OPCUA客户端的介绍,详细阐述用该组件中OpcUa-Client节点实现客户端对PLC的读写,以及实现过程中遇到的问题。由于官方社区中并没有找到该组件的介绍实例,这也是本博文编写的第1个原因。

weixin_48618536的博客 957

修改状态栏颜色和状态栏字体颜色2

一个activity多个fragment,修改每个fragment的状态栏颜色和状态栏字体的颜色1、设置activity的状态栏透明,设置activity的theme value-v19.xml &lt;style name="FirstPageStyle" parent="Theme.AppCompat.Light.NoActionBar"&gt;        &lt;item name="a...

u010015933的博客 1583

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Android状态栏的沉浸(沉浸失效)、透明、修改背景颜色以及修改状态栏字体颜色

目录状态栏的沉浸修改状态栏背景颜色、字体颜色 状态栏的沉浸 这里我介绍的是我比较常用的一种方式,也是网上很多都有介绍的,不多说直接上代码 /** * 这个方法是控制布局控件是否顶在状态栏上(fitSystemWindows=true,避免布局控件顶在状态栏上)(itSystemWindows=true,布局控件顶在状态栏上) */ public static void s...

Lemon_wzq的博客 2138

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ios 系统状态栏样式修改_IOS修改状态栏的字体颜色以及修改状态栏的背景颜色...

关于状态栏的一些知识,也是在接触到产品需求之后,才认真仔细的学习研究了一番,以下代码与分析,是自己查阅资料和操作实践之后总结的1 修改状态栏的字体颜色 (设置显示电池电量、时间、网络部分标示的颜色)1): 方法一步骤一:调用[UIApplication sharedApplication]单例在Info.plist(Build Setting 旁边这个)中添加View controller-bas...

weixin_29784009的博客 2229

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

android白色状态栏字体颜色,Android 修改状态栏字体颜色

针对Android6.0+,MIUI6+,Flyme4+可以修改状态栏字体颜色:1.对于android6.0,但是小米魅族不适配(见2,3)//设置成白色的背景,字体颜色为黑色。if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {Window window = getWindow();window.addFlags(WindowManag...

weixin_35397235的博客 940

李洪强iOS开发之-修改状态栏的字体的颜色

李洪强iOS开发之-修改状态栏的字体的颜色 修改的效果: -(void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [_magicController.view setFrame:CGRectMake(0, 0, CFScreenW...

aaa1231722的博客 70

在iOS7中修改状态栏字体的颜色

在iOS7中修改状态栏字体的颜色 时间 2014-08-08 17:01:15  优快云博客 原文  http://blog.csdn.net/gaoyp/article/details/38441723 主题 iOS开发 状态栏的字体为黑色: UIStatusBarStyleDefault  状态栏的字体为白色: UIStatusBarStyleLightCo

michaelKiven的博客 507

Android 修改状态栏字体颜色

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34185512的博客 325

修改状态栏颜色和状态栏字体颜色

一个activity多个fragment,修改每个fragment的状态栏颜色和状态栏字体的颜色1、设置activity的状态栏透明,设置activity的theme value-v19.xml &lt;style name="FirstPageStyle" parent="Theme.AppCompat.Light.NoActionBar"&gt;        &lt;item name="a...

u010015933的博客 2630
上一篇: 关于: AAPT: error: not well-formed (invalid token).
下一篇: android studio第一次上传代码3
Jimven的博客
博客等级 码龄10年 27粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值