返回顶部
首页 > 资讯 > 精选 >Android状态栏白底黑字的示例代码
  • 336
分享到

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

android状态栏roi 2023-05-30 19:05:09 336人浏览 独家记忆
摘要

之前公司项目UI改版的时候,把大部分标题栏都设计成了白色,给我们的设计图是这个样子的:设计图.png这状态栏布局和图标挺像Android,但是这白底黑字Android设计规范里可没有啊,于是我们开发的时候果断忽视这个状态栏了(当时大部分用户

之前公司项目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;}

--结束END--

本文标题: Android状态栏白底黑字的示例代码

本文链接: https://lsjlt.com/news/220765.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作