文档章节

Android 沉浸式体验

布拉德利_蔡
 布拉德利_蔡
发布于 2015/09/03 23:10
字数 606
阅读 558
收藏 22

沉浸式体验

Android 4.4 Android 5.5

图中所示就是Android 4.4以后被很多人称之为沉浸式体验的典型场景,即状态栏和ActionBar是同一种颜色;一度我以为这是官方支持的,只需要几句简单的设置就可以实现,但是在查阅了许多资料之后,我发现事实上这玩意儿是一个误解,Android原生支持的并不是这样的。

Android原生支持的模式叫Translucent,实际上是一种全屏模式。仔细看下图,状态栏的颜色其实是在Activity的背景色上加了层遮罩,也就是说Activity不像以前那样被限制在导航栏和状态栏之间,而是全屏显示。

想开启Translucent模式很简单,只要在Theme里将android:windowTranslucentStatus属性给设为True即可。 下面是我自定义的Theme:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">#4284F3</item>
        <item name="android:windowTranslucentStatus">true</item>
    </style>

</resources>

效果呢就如图所示了:

看到了吧,状态栏的颜色和Actionbar的颜色并不一样,而是和Activity的背景色一样都是白色的,只不过多了一层渐变的遮罩,而且仔细看的话,状态栏那似乎有点字在后面,那其实是“Hello World”,因为Activity是全屏嘛,所以TextView就不像以前那样在Actionbar下面了,而是在屏幕的最上面,解决这个问题的方法是在Activity的布局文件中加一句android:fitsSystemWindows="true"

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
    android:fitsSystemWindows="true">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

这样Hello World就能正常显示了。

设置状态栏颜色

如果想实现文章开头的那种效果,我们需要用到一个开源库SystemBarTint,使用时只要在Activity的onCreate中加入:

SystemBarTintManager tintManager = new SystemBarTintManager(this);
// enable status bar tint
tintManager.setStatusBarTintEnabled(true);
tintManager.setTintColor(Color.parseColor("#4284F3"));

这个库还支持设置导航栏的颜色,非常方便。

这是在Android 4.4里实现的方法,如果在Android 5.0以上的系统中,我们有更方便的方法,因为系统提供的Material主题里提供设状态栏的标签,具体介绍见使用Material的主题

© 著作权归作者所有

共有 人打赏支持
布拉德利_蔡

布拉德利_蔡

粉丝 0
博文 5
码字总数 2293
作品 0
南京
程序员
私信 提问
Android状态栏实现沉浸式模式

因为Android官方从来没有给出过沉浸式状态栏这样的命名,只有沉浸式模式(Immersive Mode)这种说法。而有些人在没有完全了解清楚沉浸模式到底是什么东西的情况下,就张冠李戴地认为一些系统...

津乐
04/20
0
0
加载loading对话框的功能(不退出沉浸式效果)

上一篇基于修改系统源码的前提下,实现了完全的沉浸式体验效果。可参考这篇 戳这 一、自定义Dialog 在沉浸式效果下,当界面弹出对话框时,对话框将获取到焦点,这将导致界面退出沉浸式效果,...

cczheng
12/08
0
0
android兼容oppo手机刘海屏解决方案

引用自OPPO官方文档,这里缩减了一些内容,选取重要内容,包括oppo沉浸式的兼容。 转载请标明出处: https://blog.csdn.net/DJY1992/article/details/80688802 本文出自:【奥特曼超人的博客】...

奥特曼超人
06/14
0
0
你应该知道的2016年有关App开发的技术创新

上一篇简述了2016年有关App产品的年中总结,这篇开始历数有关App开发的技术创新!无论你是创业者,还是程序员,无论你是否懂编程、写代码,利用APICloud平台数据撰写的年中总结,集合了移动应...

duduo丶
2016/07/14
184
0
adjustResize模式下ExpandaleListView中输入框焦点错乱及布局底部的导航栏被顶在键盘上方的处理

  为了更好的用户体验,煎熬了许久,得到这么个解决方案。在此记录下来,以供后来者参考。   第一部分     清单文件中组件activity的属性值的含义:      【A】stateUnspecifie...

Prime_T
11/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

为什么只有你每次提交代码,log里面会出现merge

http://www.cnblogs.com/Sinte-Beuve/p/9195018.html

踏破铁鞋无觅处
3分钟前
0
0
如何学习大数据:spark发布程序

一、对于spark程序只是用于默认的spark包的情况 直接点击pcakage 将程序进行在linux当中进行发布 客户端模式:测试 spark-submit --class com.keduox.App \ --master yarn \ --deploy-mode ...

架构师springboot
3分钟前
0
0
oracle job(定时任务)

创建 定时任务 job declare job number;BEGIN DBMS_JOB.SUBMIT( JOB => job, -- job任务的唯一标识(自动生成) WHAT => 'INSERT into TEXTL (id) VALUES(TEXT......

骑羊放狼灬
7分钟前
0
0
Spring声明式事务在抛出异常时不回滚(RollBack)

Spring声明式事务默认只在RuntimeException时Rollback(回滚),不当的try catch会导致事务不回滚。 spring事务默认运行时异常回滚,RuntimeException 配置时添加异常回滚 rollback-for="Th...

叶落花开
7分钟前
0
0
赋能时空云计算 阿里云数据库时空引擎Ganos上线

随着移动互联网、位置感知技术、对地观测技术的快速发展,时空信息已从传统GIS行业渗透到大众应用及各行各业。从静态POI(兴趣点)到APP位置信息,从导航电子地图到车辆行驶轨迹,从卫星影像...

阿里云云栖社区
10分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部