Android系统更改状态栏字体颜色
2017-12-26 09:34
330 查看
随着时代的发展,Android的状态栏都不是乌黑一片了,在Android4.4之后我们可以修改状态栏的颜色或者让我们自己的View延伸到状态栏下面。我们可以进行更多的定制化了,然而有的时候我们使用的是淡色的颜色比如白色,由于状态栏上面的文字为白色,这样的话状态栏上面的文字就无法看清了。因此本文提供一些解决方案,可以是MIUI6+,Flyme4+,Android6.0+支持切换状态栏的文字颜色为暗色。
修改MIUI
public static boolean setMiuiStatusBarDarkMode(Activity activity, boolean darkmode) {
Class<? extends Window> clazz = activity.getWindow().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);
extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
上面为小米官方提供的解决方案,主要为MIUI内置了可以修改状态栏的模式,支持Dark和Light两种模式。
修改Flyme
同理使用跟miui类似的方式
修改Android6.0+
Android 6.0开始,谷歌官方提供了支持,在style属性中配置android:windowLightStatusBar
即可, 设置为true时,当statusbar的背景颜色为淡色时,statusbar的文字颜色会变成灰色,为false时同理。
修改MIUI
public static boolean setMiuiStatusBarDarkMode(Activity activity, boolean darkmode) {
Class<? extends Window> clazz = activity.getWindow().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);
extraFlagField.invoke(activity.getWindow(), darkmode ? darkModeFlag : 0, darkModeFlag);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
上面为小米官方提供的解决方案,主要为MIUI内置了可以修改状态栏的模式,支持Dark和Light两种模式。
修改Flyme
public static boolean setMeizuStatusBarDarkIcon(Activity activity, boolean dark) { boolean result = false; if (activity != null) { try { WindowManager.LayoutParams lp = activity.getWindow().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); activity.getWindow().setAttributes(lp); result = true; } catch (Exception e) { } } return result; }
同理使用跟miui类似的方式
修改Android6.0+
Android 6.0开始,谷歌官方提供了支持,在style属性中配置android:windowLightStatusBar
即可, 设置为true时,当statusbar的背景颜色为淡色时,statusbar的文字颜色会变成灰色,为false时同理。
<style name="statusBarStyle" parent="@android:style/Theme.DeviceDefault.Light"> <item name="android:statusBarColor">@color/status_bar_color</item> <item name="android:windowLightStatusBar">false</item> </style>目前为止,android6.0的市场占有率还很少,而MIUI和flyme在国内占有率还算可以,因此,我们可以尽自己所能,适配更多。如果你还有其他的奇淫技巧,也欢迎分享补充。
相关文章推荐
- Android系统更改状态栏字体颜色
- Android系统更改状态栏字体颜色
- Android系统更改状态栏字体颜色
- Android系统更改状态栏字体颜色
- Android系统更改状态栏字体颜色
- Android系统更改状态栏字体颜色
- Android系统更改状态栏字体颜色
- Android系统更改状态栏字体颜色
- 透明状态栏或沉浸式状态在MIUI系统下,更改系统状态栏字体颜色的方法
- Android系统状态栏字体颜色在暗色背景和亮色背景下的改变方法
- Android修改系统自带Spinner字体大小和颜色示例代码
- iOS中如何更改状态栏的字体颜色(白色、黑色字体)
- Android 系统字体和颜色样式
- Android设置状态栏透明与设置状态栏字体颜色Mode
- (Android)react-native更改状态栏文字和图标颜色
- [置顶] android白色背景状态栏字体颜色
- Android-->沉浸式状态栏字体颜色的修改(只针对小米和魅族)
- Android更改状态栏颜色
- iOS更改状态栏字体颜色
- Android 系统字体和颜色样式