博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android状态栏黑色字体,时间电池深色
阅读量:4291 次
发布时间:2019-05-27

本文共 3970 字,大约阅读时间需要 13 分钟。

首先感谢前人的努力探索:

http://www.jianshu.com/p/7f5a9969be53

http://blog.csdn.net/kezhenlu/article/details/51556160
http://blog.csdn.net/angcyo/article/details/49834739
http://www.open-open.com/lib/view/open1452308426605.html

4.4以上可以做状态栏的沉浸式,在沉浸式的颜色和时间wifi等颜色相同时,为了满足设计,就要改变wifi等状态栏字体的颜色,首先来说,这是一个系统级别的功能,并不是什么系统,什么型号的手机都支持..适配浅色状态栏深色字体的时候发现底层版本为Android6.0.1的MIUI7.1系统不支持View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR设置,还是得用MIUI自己的深色字体方法。

目前可以是MIUI6+,Flyme4+,Android6.0+支持切换状态栏的文字颜色为暗色。

小米手机

public class MIUIHelper implements IHelper {    /**     * 设置状态栏字体图标为深色,需要MIUI6以上     *     * @param isFontColorDark 是否把状态栏字体及图标颜色设置为深色     * @return boolean 成功执行返回true     */    @Override    public boolean setStatusBarLightMode(Activity activity, boolean isFontColorDark) {        Window window = activity.getWindow();        boolean result = false;        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 (isFontColorDark) {                    extraFlagField.invoke(window, darkModeFlag, darkModeFlag);//状态栏透明且黑色字体                } else {                    extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体                }                result = true;            } catch (Exception e) {                e.printStackTrace();            }        }        return result;    }}
魅族手机4+:

public class FlymeHelper implements IHelper {    /**     * 设置状态栏图标为深色和魅族特定的文字风格     * 可以用来判断是否为Flyme用户     *     * @param isFontColorDark 是否把状态栏字体及图标颜色设置为深色     * @return boolean 成功执行返回true     */    @Override    public boolean setStatusBarLightMode(Activity activity, boolean isFontColorDark) {        Window window = activity.getWindow();        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 (isFontColorDark) {                    value |= bit;                } else {                    value &= ~bit;                }                meizuFlags.setInt(lp, value);                window.setAttributes(lp);                result = true;            } catch (Exception e) {                e.printStackTrace();            }        }        return result;    }}

android6.0+有两种方法:

1,代码

public class AndroidMHelper implements IHelper {    /**     * @return if version is lager than M     */    @Override    public boolean setStatusBarLightMode(Activity activity, boolean isFontColorDark) {        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {            if (isFontColorDark) {                // 沉浸式                //                activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);                //非沉浸式                activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);            } else {                //非沉浸式                activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);            }            return true;        }        return false;    }}
2,xml形式

true
统一方案:

统一上面的方案,就有一下的适配代码:

暂时不贴了,其实都差不多,做 if --else --- 就行了.

OK.

你可能感兴趣的文章
mybatis使用foreach批次插入,解决sequence只查询一次的问题(在此,我只看union all 部分)
查看>>
有关分布式 MySQL 数据库中间件 MySQLDA,一文为你深入介绍~
查看>>
小马分享(如何使用Spring实现读写分离(MySQL实现主从复制))
查看>>
使用maven profile实现多环境配置
查看>>
tomcat-自带的简单session共享,小集群适用
查看>>
web.xml 配置中classpath: 与classpath*:的区别
查看>>
分布式实时日志分析解决方案 ELK 部署架构
查看>>
微服务MySQL分库分表数据到MongoDB同步方案
查看>>
kafka知识点整理总结
查看>>
springboot使用JPA创建权限功能,所需要的表
查看>>
介绍Redis的各种用途以及使用场景
查看>>
Oracle分页查询,面试你值得关注!
查看>>
如何把内网IP映射到公网IP
查看>>
【工具篇】Excel文件导出从未如此简单——EasyPOI的使用
查看>>
如何将 oracle 和 mysql数据库的相互迁移
查看>>
Java并发编程:Synchronized及其实现原理
查看>>
Spring事务配置的五种方式及事务传播相关(不看后悔,一看必懂!)
查看>>
利用Mysql5.7的新特性实现多机房高可用架构
查看>>
Redis服务支持5000万的QPS,有什么好的思路?
查看>>
阿里云Redis读写分离典型场景:如何轻松搭建电商秒杀系统
查看>>