美文网首页
Android 如何快速打造沉浸式ui

Android 如何快速打造沉浸式ui

作者: chimaeraqm | 来源:发表于2018-10-26 00:10 被阅读0次

沉浸式ui因其更好的界面一致性,在Android应用,特别是google的原生app中得到了广泛的应用,随着Android版本的迭代,在6.0版本后仅需要几个简单的设置就可以实现效果很好的沉浸式体验。

总述

Android app默认界面包含如下几部分: 微信图片_20181025230140.png

1)顶部用于显示时间等信息的StatusBar;
2)StatusBar下方通常有Toolbar(在较早的Android版本中为Actionbar);
3)对于无实体按键的机型,界面底部还有包含虚拟操作按键的NavigationBar。
针对上述三个模块的布局及衔接,即是打造沉浸式ui的关键:
1)隐藏NavigationBar;
2)app主界面(通常为Toolbar)布局向上延伸到屏幕顶端;
3)StatusBar隐藏或者显示为和app主界面(或者Toolbar)一致的风格。

ui界面风格的主要依赖app的theme style,以及对界面布局view的设置实现。

theme style设置主要参数说明

在res/values/styles.xml下新建自定义的app主题,作为整个app的主题,相关参数及说明如下。

<style name="CurrentAppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <!--<item name="android:windowTranslucentStatus">true</item>-->
        <!--<item name="android:windowTranslucentNavigation">true</item>-->
        <item name="android:statusBarColor">@color/colorTrans</item>
        <item name="android:navigationBarColor">@color/colorTrans</item>

1)这里采用的Theme继承自Theme.AppCompat.Light.NoActionBar,该主题不包含默认的顶部动作条(即Toolbar)。
这里需要注意,使用该Theme时

<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>

是必须要设置的两个参数,否则运行时即会触发无法找到ActionBar的错误。
2)注释掉的部分

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
是Android 4.4(API 19)加入的新风格属性,其用途是将对应的NavigationBar和StatusBar设置为透明色,实现的效果在Android4.4和Android5.5之后的版本上略有不同,如下所示。 1362430-8f8461b9ff5fdf98.jpg

该属性设置虽然在当时专为沉浸式ui服务,statusbar有特殊的底色以区分周围的布局;Navigationbar遮蔽了部分的布局,对界面的显示和实际的操作都有影响。
3)为避免上述问题,Android5.0(API 21)后加入了如下两个属性

<item name="android:statusBarColor">@color/colorTrans</item>
<item name="android:navigationBarColor">@color/colorTrans</item>

将statusbar和navigationbar的风格设置开放,开发者就可以自由的设置这两个区域的颜色了。如果希望实现和主布局统一的风格,仅需要将颜色设置为透明即可。

Activity动态设置实现全屏显示的布局

在Activity的onCreate中可通过getWindow().getDecoView()获取整个布局的视图,进而通过setSystemUiVisibility为布局视图设置标签实现想要的显示风格。

int setup = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_IMMERSIVE
                        | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
getWindow().getDecorView().setSystemUiVisibility(setup);

有更多参数可以方便实现不同需求的沉浸式风格:

SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
SYSTEM_UI_FLAG_FULLSCREEN

这两个都是将当前布局全屏显示,不同的是,使用后者,则界面仅包含当前布局,而不再显示系统缺省的statusbar和navigationbar,这个的使用场景多为启动界面或者宣传界面;前者会将当前布局全屏显示,但是系统缺省的statusbar和navigationbar会以半透明色显示在当前布局上层。

SYSTEM_UI_FLAG_HIDE_NAVIGATION

隐藏navigationbar。仅包含此项设置时,对于界面的任何操作都会自动将navigationbar重新调出,且将hide的属性重置为无效。如果需要得到更稳定的navigationbar隐藏效果,就需要加入如下两个标签之一:

SYSTEM_UI_FLAG_IMMERSIVE
SYSTEM_UI_FLAG_IMMERSIVE_STICKY

这两个标签会较长久的隐藏navigationbar,但并非永久隐藏。其中使用前者时,在操作顶部或者底部系统菜单时,navigationbar也会被重新召回。

SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

Android6.0(API23)时加入的新属性,其作用是改变statusbar中信息的显示颜色。在之前的版本中statusbar的显示颜色是系统默认的(白色),并不会根据当前布局的颜色修改,导致在浅色的顶部布局下,statusbar信息难以辨认。加入该属性后,statusbar的信息显示颜色会使用黑色。

布局view被StatusBar遮蔽的处理

单独使用SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN时,view和statusbar的显示效果如下: 微信截图_20181025235900.png

图中Toolbar布局部分被Statusbar遮盖,导致布局有些混乱,这时候需要在Toolbar的布局文件中加入

android:fitsSystemWindows="true"
布局会相应转变为 微信截图_20181026000203.png

Toolbar和StatusBar之间显示了正确的位置关系。该属性在实际使用时需要注意,该属性的实际效果即在View布局的顶部加入一个padding,padding的尺寸根据statusbar自动计算,如果该属性作用于一个viewgroup,如各种形式的layout,需要对viewgroup中的view设置相应的padding bottom,并设置viewgroup的

android:layout_height="wrap_content"

否则加入的padding top会使所有的子view都往下便宜,挤压布局空间。

实现沉浸式UI的过程中踩了不少坑,更多更详细的操作说明可跳转至https://www.jianshu.com/p/f02abf30fc82查看。

相关文章

  • Android 如何快速打造沉浸式ui

    沉浸式ui因其更好的界面一致性,在Android应用,特别是google的原生app中得到了广泛的应用,随着And...

  • android快速实现沉浸式

    android实现沉浸式之前一直没有这方面的需求,也一直没有做,今天做了一下写了个工具类,分享给大家,废话不多说直...

  • android沉浸式状态栏 轻量 简便

    android沉浸式状态栏 android 沉浸式状态栏 网上看了很多沉浸式,感觉用起来麻烦,而且有些库非常大,于...

  • Android学习目录

    Theme风格 Android 沉浸式风格(为毛叫沉浸式这么唬人) Build编译 Android 多渠道打包(同...

  • Android沉浸式UI实现及原理

    沉浸式体验 首先别吐槽沉浸式这个名词吧,毕竟这各名字是广为人知并且比透明状态栏加透明导航栏更酷。充分使用整个屏幕将...

  • Android 沉浸式模式与常见状态栏和导航栏效果

    Android沉浸式模式 官方称沉浸式状态栏为沉浸式模式。 什么是沉浸式?沉浸式就是让人专注当前的(由设计者营造)...

  • Android 补充 LayerDrawable 沉浸式状态栏

    小菜前些日子整理了两次小小的沉浸式状态栏的总结:Android 沉浸式状态栏的多种样式 和 Android 沉浸式...

  • android沉浸式状态栏

    android沉浸式状态栏 参考文章 另外两种android沉浸式状态栏实现思路 android4.4+实现MD状...

  • AndroidView

    Android 沉浸式 (透明) 状态栏适配 Android 沉浸式状态栏仿淘宝、京东拖拽商品详情(可嵌套View...

  • android沉浸式

    一、内容概述: 1、如何修改状态栏颜色。2、如何修改状态栏文字颜色。3、如何不被虚拟键隐藏,或隐藏虚拟键。4、如何...

网友评论

      本文标题:Android 如何快速打造沉浸式ui

      本文链接:https://www.haomeiwen.com/subject/nxshtqtx.html