安卓开发——如何切换状态栏字符颜色(状态栏黑色字符)
来源:互联网 发布:武汉理工大学网络教育 编辑:程序博客网 时间:2024/05/16 15:06
最近在实现换肤功能时,遇到了需要切换安卓状态栏字体颜色的问题。
我们都知道安卓默认的状态栏字体及图标的默认颜色是白色,当我们将状态栏背景颜色设置为白色等浅色时,字体及图标就显示不清楚了。这时就需要将字体及图标颜色设置为深色,办法如下:
1、针对安卓6.0以上版本
google官方在安卓6.0版本才推出的深色状态栏字体api。
a、属性设置
在style属性中加上:
<item name="android:windowLightStatusBar">true</item>不过设置属性的这种方法在实际使用中不够灵活,不能随意切换。
b、代码设置
private void changeStatusBarTextColor(boolean isBlack) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (isBlack) { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//设置状态栏黑色字体 }else { getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);//恢复状态栏白色字体 } } }网上许多博客只说明了设置状态栏黑色字体的方法,却没有说明恢复成白色的方法,我便只能专门去查了查。
2、MIUI及Flyme
第二个方法就是网上许多地方提到的MIUI、Flyme公开的实现方法,不过都只支持安卓4.4以上版本。
MIUI:
/** * 设置状态栏字体图标为深色,需要MIUIV6以上 * @param window 需要设置的窗口 * @param dark 是否把状态栏字体及图标颜色设置为深色 * @return boolean 成功执行返回true * */public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) { 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(dark){ extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体 }else{ extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体 } result=true; }catch (Exception e){ } } return result;}
不过在某些情况下,好像MIUI这个办法和上文提到的google提供的标准方法有些冲突,所以MIUI决定兼容Android的方法,舍弃MIUI自己的实现办法,从7.7.13开发版生效,之后随MIUI9外发。
/** * 设置状态栏图标为深色和魅族特定的文字风格 * 可以用来判断是否为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;}
阅读全文
0 0
- 安卓开发——如何切换状态栏字符颜色(状态栏黑色字符)
- 安卓自定义状态栏颜色
- 安卓自定义状态栏颜色
- 安卓状态栏颜色改变
- 自定义状态栏颜色 安卓
- 安卓设置状态栏颜色
- 安卓改变状态栏颜色
- IOS开发—修改状态栏颜色
- 安卓状态栏优化,实现透明状态栏,沉侵式状态栏,改变状态栏颜色
- iOS中如何更改状态栏的字体颜色(白色、黑色字体)
- 安卓开发——隐藏状态栏和操作栏
- 【Android】安卓开发实战之自定义ActionBar(活动栏、状态栏)颜色且没有色差
- 安卓修改状态栏颜色(第三方)
- 安卓4.4以上修改状态栏颜色
- 安卓设置系统状态栏颜色
- 状态栏字符跳动
- iOS 改变状态栏颜色(亮白、黑色)
- IOS开发——IOS7 状态栏颜色更改
- 自动运维的脚本分析
- sdnu1281.谁是第一名
- Hive入门之数据类型
- tcp/ip学习笔记--第15章 Trivial File Transfer Protocol 简单文件传输协议
- ipynb后缀文件怎么打开
- 安卓开发——如何切换状态栏字符颜色(状态栏黑色字符)
- node.js环境搭建
- .h头文件 .lib库文件 .dll动态库文件之间的关系
- Linux系统下安装MySQL教程(CentOS-6.4-32bit-DVD版)
- JavaScript预编译过程理解
- 心情
- Nginx和Tomcat集群部署
- source insight 高亮显示字符串的引用情况
- [leetcode] 442. Find All Duplicates in an Array