Android状态栏白底黑字的示例代码

之前公司项目UI改版的时候,把大部分标题栏都设计成了白色,给我们的设计图是这个样子的:

MIUI深色状态栏字体模式.png

6.0原生深色状态栏字体模式.png

网上有关状态栏颜色设置的文章很多,下面这段代码是我用的状态栏设置工具类,算是一个总结吧。

官方在4.4版本只提供了状态栏透明的api,大家普遍采用开源库SystemBarTint对4.4版本状态栏颜色进行设置,请各位自行下载。

在设置状态栏全透明后,整个activity布局都会上移充满整个屏幕,如果你不想让布局上移的话就需要在根布局设置

android:fitsSystemWindows="true"

以下为我的状态栏设置工具类:

/**
 * Created by 赵晨璞 
 */
public class StatusBarUtil {

/**
 * 修改状态栏为全透明
 * @param activity
 */
@TargetApi(19)
public static void transparencyBar(Activity activity){
  if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = activity.getWindow();
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(Color.TRANSPARENT);

  } else
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window window =activity.getWindow();
    window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  }
}

  /**
 * 修改状态栏颜色,支持4.4以上版本
 * @param activity
 * @param colorId
 */
public static void setStatusBarColor(Activity activity,int colorId) {

  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    Window window = activity.getWindow();
//   window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);  
    window.setStatusBarColor(activity.getResources().getColor(colorId));
  } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    //使用SystemBarTint库使4.4版本状态栏变色,需要先将状态栏设置为透明
    transparencyBar(activity);
    SystemBarTintManager tintManager = new SystemBarTintManager(activity);
    tintManager.setStatusBarTintEnabled(true);
    tintManager.setStatusBarTintResource(colorId);
  }
}

/**
 *状态栏亮色模式,设置状态栏黑色文字、图标,
 * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
 * @param activity
 * @return 1:MIUUI 2:Flyme 3:android6.0
 */
public static int StatusBarLightMode(Activity activity){
  int result=0;
  if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    if(MIUISetStatusBarLightMode(activity,true)){
      result=1;
    }else if(FlymeSetStatusBarLightMode(activity.getWindow(),true)){
      result=2;
    }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
      activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
      result=3;
    }
  }
  return result;
}

/**
 * 已知系统类型时,设置状态栏黑色文字、图标。
 * 适配4.4以上版本MIUIV、Flyme和6.0以上版本其他Android
 * @param activity
 * @param type 1:MIUUI 2:Flyme 3:android6.0
 */
public static void StatusBarLightMode(Activity activity,int type){
  if(type==1){
    MIUISetStatusBarLightMode(activity,true);
  }else if(type==2){
    FlymeSetStatusBarLightMode(activity.getWindow(),true);
  }else if(type==3){
    activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  }

}

/**
 * 状态栏暗色模式,清除MIUI、flyme或6.0以上版本状态栏黑色文字、图标
 */
public static void StatusBarDarkMode(Activity activity,false);
  }else if(type==2){
    FlymeSetStatusBarLightMode(activity.getWindow(),false);
  }else if(type==3){
    activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
  }

}


/**
 * 设置状态栏图标为深色和魅族特定的文字风格
 * 可以用来判断是否为Flyme用户
 * @param window 需要设置的窗口
 * @param dark 是否把状态栏文字及图标颜色设置为深色
 * @return boolean 成功执行返回true
 *
 */
public static boolean FlymeSetStatusBarLightMode(Window window,value);
      window.setAttributes(lp);
      result = true;
    } catch (Exception e) {

    }
  }
  return result;
}

 /**
 * 需要MIUIV6以上
 * @param activity
 * @param dark 是否把状态栏文字及图标颜色设置为深色
 * @return boolean 成功执行返回true
 *
 */
public static boolean MIUISetStatusBarLightMode(Activity activity,darkModeFlag);//清除黑色字体
      }
      result=true;

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        //开发版 7.7.13 及以后版本采用了系统API,旧方法无效但不会报错,所以两个方式都要加上
        if(dark){
          activity.getWindow().getDecorView().setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN| View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
        }else {
          activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);
        }
      }
    }catch (Exception e){

    }
  }
  return result;
}
}

适配浅色状态栏深色字体的时候发现底层版本为Android6.0.1的MIUI7.1系统不支持View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR设置,还是得用MIUI自己的深色字体方法。

2017年7月,小米才终于想起来对状态栏字符颜色的逻辑做了一次调整,改为兼容Android原生的设置方式,但是没给出怎么区分旧系统与新系统的方法==、

关于 MIUI 状态栏字符颜色逻辑调整的说明

没办法,只能在设置MIUI状态栏的地方把两种方法都写上。

三方Android系统对底层改的挺乱的,也是让人头痛。O__O

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

以上是来客网为你收集整理的Android状态栏白底黑字的示例代码全部内容,希望文章能够帮你解决Android状态栏白底黑字的示例代码所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。