文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-05-30 19:47

关注

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

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

设计图.png

这状态栏布局和图标挺像Android,但是这白底黑字Android设计规范里可没有啊,于是我们开发的时候果断忽视这个状态栏了(当时大部分用户还都是Android 4.4)。

结果设计师拿着测试版过来问,你们安卓这个状态栏颜色怎么没改啊。

我:这个做不了。

设计师一脸质疑。

我:Android4.4以上系统版本可以修改状态栏颜色,但是只有小米的MIUI、魅族的Flyme和Android6.0以上系统可以把状态栏文字和图标换成深色,其他的系统状态栏文字都是白色的,换成浅色背景的话就看不到了。

设计师一脸懵逼不知所云。

后来看着这黑色状态栏白色标题栏实在难看,而且自己用的是MIUI,于是还是做了适配。

其实很多国内三方Android系统都有深色状态栏字体模式,但是目前只看到了小米和魅族公开了各自的实现方法,小米的支持MIUI V6以上版本,魅族的支持Flyme4.0以上版本。代码如下:

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;} public static boolean MIUISetStatusBarLightMode(Activity activity, boolean dark) {  boolean result = false;  Window window=activity.getWindow();  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;      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;}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯