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系统更改状态栏字体颜色的相关代码,希望对大家的学习有所帮助。