修改状态栏颜色和状态栏字体颜色2

一个activity多个fragment,修改每个fragment的状态栏颜色和状态栏字体的颜色
1、设置activity的状态栏透明,设置activity的theme
 value-v19.xml
 <style name="FirstPageStyle" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentStatus">true</item>
    </style>

 value-v21.xml
  <style name="FirstPageStyle" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
   
2、给activity的布局根元素加上android:fitsSystemWindows="true"属性
3、切换fragment的时候设置如下
//6.0以上修改状态栏和状态栏字体颜色,6.0以下只修改状态栏颜色
public static void setStatusBarMode(Activity activity, boolean bDark) {
//6.0以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
View decorView = activity.getWindow().getDecorView();
if (decorView != null) {
int vis = decorView.getSystemUiVisibility();
if (bDark) {
vis |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
setStatusBarColor(activity,Color.WHITE);
} else {
vis &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
setStatusBarColor(activity,Color.parseColor("#176ce0"));
}
decorView.setSystemUiVisibility(vis);
}
}else{
setStatusBarColor(activity,Color.parseColor("#176ce0"));
}
}
//设置状态栏的颜色
public static void setStatusBarColor(Activity activity,int color){
Window window = activity.getWindow();
ViewGroup viewGroup = (ViewGroup)window.getDecorView();
View view = new View(window.getContext());
int statusBarHeight = getStatusBarHeight(window.getContext());
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,statusBarHeight);
layoutParams.gravity = Gravity.TOP;
view.setLayoutParams(layoutParams);
view.setBackgroundColor(color);
viewGroup.addView(view);
}
//获取状态栏的高度
private static int getStatusBarHeight(Context context){
int statusBarHeight = 0;
int resourceId = context.getResources().getIdentifier("status_bar_height","dimen","android");
if(resourceId > 0){
statusBarHeight = context.getResources().getDimensionPixelOffset(resourceId);
}
return statusBarHeight;
}

//以上修改状态栏字体颜色的方法发现在部分小米手机上无效,可以尝试以下方法:
/**
* 状态栏颜色字体(白底黑字)修改 MIUI6+
*
* @param activity
* @param darkmode
* @return
*/
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;
}


/**
* 状态栏颜色字体(白底黑字)修改 Flyme4+
*
* @param activity
* @param dark
* @return
*/
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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值