最近做的这个项目因为标题栏的颜色是一种很浅的颜色,我在开发时也没有关注标题栏字体的颜色.然后昨天UI拿
着手机突然过来找我,说我手机上的标题栏的字体怎么这么浅,我拿过来看了看,原来是她手机标题栏字体的颜色是
白色的,所以基本上看不清,我拿我自己的手机看了看,发现我手机的标题栏字体颜色却是黑色的(我手机是魅族5,
她的是vivo x9),所以我当时就怀疑是不是系统的原因.然后就上网搜了下发现:Android4.4以上系统版本可以修改
状态栏颜色,但是只有小米的MIUI、魅族的Flyme和Android6.0以上系统可以把状态栏文字和图标换成深色,其他
的系统状态栏文字都是白色的,换成浅色背景的话就看不到了.而且魅族设置状态栏图标为深色和魅族特定的文
字风格,Flyme4.0以上;小米的MIUI设置状态栏字体图标为深色,需要MIUIV6以上,最后就找到了下面这篇博客:
http://www.jianshu.com/p/7f5a9969be53
他写了一个工具类,下面我就贴出来:

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.getWindow(), 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.getWindow(), 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,int type){        if(type==1){            MIUISetStatusBarLightMode(activity.getWindow(), 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, boolean dark) {        boolean result = false;        if (window != null) {            try {                WindowManager.LayoutParams lp = window.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);                window.setAttributes(lp);                result = true;            } catch (Exception e) {            }        }        return result;    }    /**     * 设置状态栏字体图标为深色,需要MIUIV6以上     * @param window 需要设置的窗口     * @param dark 是否把状态栏字体及图标颜色设置为深色     * @return  boolean 成功执行返回true     *     */    public static boolean MIUISetStatusBarLightMode(Window window, boolean dark) {        boolean result = false;        if (window != null) {            Class clazz = window.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);                if(dark){                    extraFlagField.invoke(window,darkModeFlag,darkModeFlag);//状态栏透明且黑色字体                }else{                    extraFlagField.invoke(window, 0, darkModeFlag);//清除黑色字体                }                result=true;  }catch (Exception e){}      }        return result;    }}

官方在4.4版本只提供了状态栏透明的api,大家普遍采用开源库SystemBarTint对4.4版本状态栏颜色进行设置,请 各位自行下载。
官方在Android6.0中提供了亮色状态栏模式,配置只需一行代码:

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);   }

注意:

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

android:fitsSystemWindows="true"

欢迎大家指教!

更多相关文章

  1. Android中直播视频技术探究之---摄像头Camera视频源数据采集解析
  2. Android(安卓)沉浸式状态栏-字体颜色与背景颜色修改实现与兼容
  3. Android拼图游戏的设计逻辑,从切图到交互动画,从关卡到倒计时,实例
  4. Android:如何设置底部控件view随着软键盘的弹出而上移——诺诺"涂
  5. Android跳转系统界面_大全集
  6. Android(安卓)UI总结 Android(安卓)和H5 字体大小适配
  7. 探究Android的多分辨率支持以及各种类型图标尺寸大小
  8. 【凯子哥带你夯实应用层】Android的Google官方设计指南(上)
  9. Android(安卓)酷炫来袭:制作属于你自己的音频播放器(综合运用Media

随机推荐

  1. TextView 图文聊天
  2. 用 SDK Manager.exe 无法更新 Android(安
  3. Android的设计与实现:卷I
  4. android 网络访问-图片处理优秀开源项目
  5. Android(安卓)4游戏编程入门经典
  6. TextView中ellipsize属性
  7. Android外设存储设备的访问及测试
  8. Android: Android(安卓)Bluetooth
  9. 【Android】如何让跑马灯跑起来-控件请求
  10. Android根据文件路径使用File类获取文件