随着时代的发展,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
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>
以上就是Android系统更改状态栏字体颜色的相关代码,希望对大家的学习有所帮助。
问题内容: 我正在尝试将状态栏的颜色更改为蓝色或其他某种颜色。 这可能吗,或者Apple不允许吗? 问题答案: 注意:此解决方案在iOS 13及更高版本下失败。 Plist中的第一个设置为 输出屏幕截图如下
在Android 5.0的指南中,导航栏似乎是可定制的:http://www . Google . com/design/spec/layout/structure . html # structure-system-bars 如何更改导航栏的颜色?我想用白色的。 编辑:在我的资源中,我测试了这种风格: 但是按钮是白色的。我想作为第二个图像相同的渲染器。
对于ios 13,我无法设置状态栏的文本颜色。如何查看statusBarManager?如何仅更改文本颜色? 由于: 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因是:“UIApplication上调用了-statusBar或-statusBarWindow的应用程序:由于不再有状态栏或状态栏窗口,必须更改此代码。”。“请使用“场景”窗口上
在我的一个活动中,我使用更改了工具栏的颜色。但在使用的5.0设备上,颜色是活动主题中的的颜色,所以我有两种非常不同的颜色,看起来不太好。 我意识到在5.0中可以使用,但没有这个功能。 所以我的问题是在5.0中,如何用更改状态栏颜色?
嘿,我正在尝试改变状态栏的颜色,使其与动作栏的颜色相同(可能是透明的)。在Android Lolipop上,这不是问题,但在Kitkat上,它看起来像这张图片 我尝试了许多其他的解决方案,但仍然没有解决它。 以下是V19XML样式
如果你认为它重复了一些其他的问题,那么我应该让你现在我已经尝试了3,4页的谷歌搜索,也实现了他们。