前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 沉浸式状态栏的实现

Android 沉浸式状态栏的实现

作者头像
码客说
发布2019-10-22 16:52:57
6870
发布2019-10-22 16:52:57
举报
文章被收录于专栏:码客

前言

Android沉浸式体验有几个注意点

  • Android4.4(api19)及以上的版本才支持
  • Android5.0(api21)及以上的版本状态栏多了一个半透的黑色层
  • Android5.0(api21)的黑色层通过style去掉后 应用切出去后再切进来后会再次出现

我的解决方案

目前这种方案 不管是各个版本 还是是否有侧滑都没有问题

首先先建两个文件夹 layout-v19values-v19

之所以不添加values-v21是因为 Android5.0(api21)的黑色层通过style去掉后 应用切出去后再切进来后会再次出现

所以用代码去除

values文件夹下的styles.xml

代码语言:javascript
复制
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

values-v19文件夹下的`styles.xml

代码语言:javascript
复制
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>

    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

onCreate方法中添加(Kotlin代码)

用这种方式去除Android5.0以上 状态栏的黑色半透层 在重新切回应用时也不会被再次添上

代码语言:javascript
复制
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    val window = window
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
    window.decorView.systemUiVisibility =
            View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
    window.statusBarColor = Color.TRANSPARENT
}

接下来就是设置状态栏的背景了

我的方式是建了适配api19前后的两个layout文件直接添加到了页面中

layout文件夹下的zj_statusbar.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="0dp">
</LinearLayout>

layout-19文件夹下的zj_statusbar.xml

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="24dp"
              android:background="@color/zj_orange">
</LinearLayout>

不建议用以下方式(在有侧滑的时候有问题)

代码语言:javascript
复制
android:fitsSystemWindows="true"
android:clipToPadding="true"
android:background="@android:color/holo_blue_light"

这种方式首先最外层必须要设置为背景色 它会用该背景色来填充状态栏和虚拟按键栏

一个页面只有一个该属性会生效 如果页面有侧滑的时候不太好处理

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 我的解决方案
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档