Android系统更改状态栏字体颜色
随着时代的发展,Android的状态栏都不是乌黑一片了,在Android4.4之后我们可以修改状态栏的颜色或者让我们自己的View延伸到状态栏下面。我们可以进行更多的定制化了,然而有的时候我们使用的是淡色的颜色比如白色,由于状态栏上面的文字为白色,这样的话状态栏上面的文字就无法看清了。因此本文提供一些解决方案,可以是MIUI6+,Flyme4+,Android6.0+支持切换状态栏的文字颜色为暗色。
修改MIUI
publicstaticbooleansetMiuiStatusBarDarkMode(Activityactivity,booleandarkmode){ Class<?extendsWindow>clazz=activity.getWindow().getClass(); try{ intdarkModeFlag=0; Class<?>layoutParams=Class.forName("android.view.MiuiWindowManager$LayoutParams"); Fieldfield=layoutParams.getField("EXTRA_FLAG_STATUS_BAR_DARK_MODE"); darkModeFlag=field.getInt(layoutParams); MethodextraFlagField=clazz.getMethod("setExtraFlags",int.class,int.class); extraFlagField.invoke(activity.getWindow(),darkmode?darkModeFlag:0,darkModeFlag); returntrue; }catch(Exceptione){ e.printStackTrace(); } returnfalse; }
上面为小米官方提供的解决方案,主要为MIUI内置了可以修改状态栏的模式,支持Dark和Light两种模式。
修改Flyme
publicstaticbooleansetMeizuStatusBarDarkIcon(Activityactivity,booleandark){ booleanresult=false; if(activity!=null){ try{ WindowManager.LayoutParamslp=activity.getWindow().getAttributes(); FielddarkFlag=WindowManager.LayoutParams.class .getDeclaredField("MEIZU_FLAG_DARK_STATUS_BAR_ICON"); FieldmeizuFlags=WindowManager.LayoutParams.class .getDeclaredField("meizuFlags"); darkFlag.setAccessible(true); meizuFlags.setAccessible(true); intbit=darkFlag.getInt(null); intvalue=meizuFlags.getInt(lp); if(dark){ value|=bit; }else{ value&=~bit; } meizuFlags.setInt(lp,value); activity.getWindow().setAttributes(lp); result=true; }catch(Exceptione){ } } returnresult; }
同理使用跟miui类似的方式
修改Android6.0+
Android6.0开始,谷歌官方提供了支持,在style属性中配置android:windowLightStatusBar
即可,设置为true时,当statusbar的背景颜色为淡色时,statusbar的文字颜色会变成灰色,为false时同理。
<stylename="statusBarStyle"parent="@android:style/Theme.DeviceDefault.Light"> <itemname="android:statusBarColor">@color/status_bar_color</item> <itemname="android:windowLightStatusBar">false</item> </style>
以上就是Android系统更改状态栏字体颜色的相关代码,希望对大家的学习有所帮助。