• Android系统更改状态栏字体颜色


    随着时代的发展,Android的状态栏都不是乌黑一片了,在Android4.4之后我们可以修改状态栏的颜色或者让我们自己的View延伸到状态栏下面。我们可以进行更多的定制化了,然而有的时候我们使用的是淡色的颜色比如白色,由于状态栏上面的文字为白色,这样的话状态栏上面的文字就无法看清了。因此本文提供一些解决方案,可以是MIUI6+,Flyme4+,Android6.0+支持切换状态栏的文字颜色为暗色。

    修改MIUI

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    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;
    }

    上面为小米官方提供的解决方案,主要为MIUI内置了可以修改状态栏的模式,支持Dark和Light两种模式。

    修改Flyme

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    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;
    }

    同理使用跟miui类似的方式

    修改Android6.0+

    Android 6.0开始,谷歌官方提供了支持,在style属性中配置android:windowLightStatusBar
    即可, 设置为true时,当statusbar的背景颜色为淡色时,statusbar的文字颜色会变成灰色,为false时同理。

    1
    2
    3
    4
    <style name="statusBarStyle" parent="@android:style/Theme.DeviceDefault.Light">
    <item name="android:statusBarColor">@color/status_bar_color</item>
    <item name="android:windowLightStatusBar">false</item>
    </style>

    目前为止,android6.0的市场占有率还很少,而MIUI和flyme在国内占有率还算可以,因此,我们可以尽自己所能,适配更多。

  • 相关阅读:
    编写一个函数print,打印一个学生的成绩数组,该数组中有5个学生的数据记录,每个记录包括num,name,score[3],用主函数输人这些记录,用print函数输出这些记录
    Windows 隐藏 远程桌面(连接栏)
    chm文档生成->Sandcastle使用帮助
    流文件保存到本地的两种方法
    关于winform 调用本地html页面路径不正确问题
    winform time.AddMinutes 时间相加
    winform 登录后跳转百度地图报错 使用委托解决
    sql 更新列表中最老的一条数据
    WINFORM 输出txt文件
    dictionary 应用(绑定dgv)
  • 原文地址:https://www.cnblogs.com/linghu-java/p/5737321.html
Copyright © 2020-2023  润新知