android 沉浸模式记录

来源:互联网 发布:台海网络电视台视点 编辑:程序博客网 时间:2024/04/26 18:32

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下载:猛戳下载

所以说小米上部分应用可以做到状态栏白色信息黑色,是因为小米系统的原因。



0 0
原创粉丝点击