Android 4.4以后的版本支持状态栏沉浸模式,通过设置代码或者配置Theme style可以开启沉浸模式。
在简书中有篇文章介绍什么是沉浸式模式,http://www.jianshu.com/p/96f623acd7c3
“沉浸状态栏”究竟是什么?
Google 在 Android 4.4 的 API 描述页面里提到了“Translucent system UI styling”,即半透明化的系统UI风格。
这个“半透明化”包括了状态栏和通知栏,当开发者让应用支持这个新特性的时候,状态栏和导航栏可以单独/同时变为渐变的半透明样式。
说到这里大家应该都明白了——没错,这就是你们口中经常提到的“沉浸模式”“沉浸状态栏”。记住了,他们的学名是"Translucent Bars",透明栏,包括了状态栏(Translucent status bar)和导航栏(Translucent navigation bar)。
在 Android 5.0 之后引入了 Material Design,状态栏和导航栏也玩出了更多花样。现在除了原有的“半透明”模式以外,还有“全透明”以及“变色”模式,一种会完全隐藏背景,另一种可以取色作为背景颜色。
真正的沉浸模式,指的是一种全屏模式,而你一般在开发者/爱好者/用户那里听到的“沉浸模式”绝大部分情况下指的是“半透明栏”或者是 Android 5.0 之后加入的“全透明/变色栏”。至于所谓“沉浸式状态栏/导航栏”之类的描述,则完全是无稽之谈。
项目开发中视觉调整titlebar为白色,并且希望状态栏白色,时间等信息是黑色的效果。这要在android上实现就go 带了
因为在android上并没有提供官方api修改状态栏时间电源等的显示模式。
但MIUI却可以实现,http://dev.xiaomi.com/doc/p=4769/index.html
小米开发者平台有篇文件收MIUI 6系统如何修改状态栏字体电源等的颜色。
默认情况的状态栏是不透明白色字体的状态栏样式
- 目前MIUI 6的完美沉浸已经支持透明白色字体和透明黑色字体
二、沉浸式状态栏实现代码
- 第三方应用需要用反射调用,参考代码:
miuiv6只支持4.4及以上版本,调用状态栏透明的方法可以直接用原生的安卓方法 @TargetApi(19) protected void setTranslucentStatus(boolean on) { Window win = getWindow(); WindowManager.LayoutParams winParams = win.getAttributes(); final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; if (on) { winParams.flags |= bits; } else { winParams.flags &= ~bits; } win.setAttributes(winParams); } 下面是调用状态栏 是否为darkmode。 public void setStatusBarDarkMode(boolean darkmode, Activity activity) { 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); } catch (Exception e) { e.printStackTrace(); } }
-
注:
- 沉浸式菜单栏只能在MIUI 6的系统上实现,其他安卓系统没有效果。
- 沉浸式效果对非MIUI系统的兼容性不会有任何影响。
- google的actionbar存在bug,不支持沉浸代码。
Demo下载:猛戳下载
所以说小米上部分应用可以做到状态栏白色信息黑色,是因为小米系统的原因。