android沉浸式状态栏(安卓沉浸式状态栏有什么功能)

Android 4.4之后状态栏和导航栏细节美化(沉浸式状态栏)

1. 简介

其实标题我是打算叫“抢眼的沉浸式状态栏”,但是查看多篇文章以及官方文档发现,虽然“沉浸式状态栏”这个名字已经烂大街并且只要一提到这个标签大家都知道是一个什么样的效果,其实沉浸式并不是这样理解的,查看官方文档发现,Google定义的沉浸式模式是4.4带来的新api——ImmersiveMode,进入沉浸式模式的Flag–>SYSTEM_UI_FLAG_IMMERSIVE_STICKY,

进入沉浸式模式之后可以更好的提高用户体验,此时手机屏幕上隐藏了状态栏和导航栏,只显示用户最关心的主体内容,让用户完全沉浸其中,这就是正确的沉浸式,这里我为了提高本文的点击量故意在标题后添加沉浸式标签,哈哈。。。。。

2. 使用场景

正确的沉浸式使用场景其实很少,常用的使用场景如下:

1. 平常app中第一次启动的引导页,还有程序的欢迎界面,这些页面我们平时使用的一般都是全屏模式,设置一个全屏主题就ok了,其实这就是一种沉浸式模式。

2. 游戏ing,现在市面上的Android手游几乎全部是沉浸式模式。

3. 目前很火的视频播放器如爱奇艺、腾讯视频等在播放视频的时候都是沉浸式模式。

这里以腾讯视频播放器为例,相关截图如下:

android沉浸式状态栏(安卓沉浸式状态栏有什么功能)图1

android沉浸式状态栏(安卓沉浸式状态栏有什么功能)图2

android沉浸式状态栏(安卓沉浸式状态栏有什么功能)图3

3. 空间利用(着重记录状态栏)

状态栏是本篇博文的重中之重,Google在android 4.4 之后加入状态栏着色以及空间利用的api,也就是说在4.4之前是没有该功能的,所以我们没必要考虑之前的系统兼容问题,但是4.4和5.0以及5.0+的状态栏着色也是有差别的。那么今天我就以Google出的Material Design设计规范来统一实现4.4以后的系统状态栏着色问题。

1. 空间利用:

1. 相关Flag注释:

1. SYSTEM_UI_FLAG_FULLSCREEN 全屏(隐藏状态栏)

2. SYSTEM_UI_FLAG_HIDE_NAVIGATION 隐藏导航栏(结合全屏Flag使用)

3. SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION 主体布局可以利用导航栏空间

4. SYSTEM_UI_FLAG_LAYOUT_STABLE 主体布局可以利用状态栏空间

5. SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 全屏(配合3和4使用)

6. SYSTEM_UI_FLAG_IMMERSIVE_STICKY 真正的沉浸式模式

2. 空间使用:

首先我们定义一个app样式主题同时适配4.4+、5.x、5.x+系统:

1. res/values/styles.xml

<resources>

<style name=”BaseAppTheme” parent=”Theme.AppCompat.Light.NoActionBar”>

<!– Customize your theme here. –>

<item name=”colorPrimary”>@color/primary</item>

<item name=”colorPrimaryDark”>@color/primary_dark</item>

<item name=”colorAccent”>#FF4081</item>

</style>

<style name=”AppTheme” parent=”@style/BaseAppTheme”>

</style>

</resources>

2. res/values-v19(如果没有该文件夹请新建)

<resources>

<style name=”AppTheme” parent=”@style/BaseAppTheme”>

这个属性是4.4系统引入的,表示透明化状态栏

<item name=”android:windowTranslucentStatus”>true</item>

</style>

</resources>

我起初是在6.0的真机上测试,主题布局可以延伸利用到状态栏空间,但是setStatusBarColor去设置状态栏颜色怎么也设置不上去,最后发现鸿神的文章有

这样一句话如下:

对于5.0由于提供了setStatusBarColor去设置状态栏颜色,但是这个方法不能在主题中设置windowTranslucentStatus属性。

所以要加以下主题设置,本人亲测,问题搞定,

3. res/value-v21

<resources>

<style name=”AppTheme” parent=”@style/BaseAppTheme”>

</style>

</resources>

因为该功能是5.0之后出来的,那么首先判断手机系统版本是否是大于5.0,那么代码如下:

if (Build.VERSION.SDK_INT >= 21) {

View decorView = getWindow().getDecorView();

int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;

decorView.setSystemUiVisibility(option);

getWindow().setStatusBarColor(Color.TRANSPARENT);

}

如果是4.4到5.0系统的话也还是需要适配的,那么我们可以动态设置一个和状态栏高度和宽度相同的view然后add置主题布局最上面,

把他当成状态栏的背景就好了,或者更简单的直接给我们的主题布局paddingTop一个状态栏的高度就ok了。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP){

// 获取主体父布局实例

ViewGroup cOntentView= (ViewGroup) activity.findViewById(android.R.id.content);

View statusBarView = new View(activity);

// 设置view的宽度为 MATCH_PARENT,高度为状态栏高度

ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,

getStatusBarHeight(activity));

// 设置view的颜色(最好和toolBar颜色一致,看起来比较美观也符合Material Design设计规范)

statusBarView.setBackgroundColor(color);

contentView.addView(statusBarView, lp);

}

2. 项目效果展示:

android沉浸式状态栏(安卓沉浸式状态栏有什么功能)图4

4. 相关Q&A

Q 1. 常见底部四个tab切换Fragment页面,加入第一个和第三个tab将状态栏着色为黑色,第二个和第四个tab将状态栏着色为透明色,这个时候切换页面时第二个和第四个

tab偶尔透明色失效变为黑色,什么情况?

A 1. 首先检查系统版本是否在4.4以上,其次检查以上主题设置和代码逻辑是否编写正确,如果一切都没问题,最后检查tab切换fragment时是用的replace()方法

还是add()和hide() 结合使用,如果是replace()请改为add()方式试试。应该是可以解决此Q。

Q 2. 使用上面的方法只能将主体布局延伸到状态栏的空间上,但无法将状态栏颜色透明化或者上色,如何解决?

A 2. 如果上述方法无法实现,可能是忘了设置API21的主题样式,如果设置还是不行,则请尝试下面这种粗暴的方法,

Window window = getWindow();

// 先清理状态栏和导航栏的状态,然后强制显示状态栏和导航栏并设置flag模式

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS

| WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);

window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

| View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

// 重新添加flag

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// 设置状态栏颜色

window.setStatusBarColor(Color.TRANSPARENT);

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023年 3月 20日 下午12:19
下一篇 2023年 3月 20日 下午12:25

相关推荐

  • applewatch个性表盘劳力士

    没想到女生会那么爱劳力士,略微有点出乎意料,不过Apple Wacth已经用销量证明了,其实自己真的很受欢迎~ 这个调查报告得出来的结果应该说是出乎不少人的意料。正常来说,身为男士…

    2023年 3月 7日
  • wifi无线,让手机与硬盘智连互通吗

    随着“超高清”越来越普及,移动存储显得更加重要。特别是手机像素越来越高,动不动就拍4K视频、超高清图片,手机容量显然不够用。为此不得不把资料转存到电脑里或移动硬盘,否则无法继续存储…

    2023年 3月 20日
  • 怎么防止手机丢失支付宝密码被盗

    扫码支付的时代,出门只要带上手机和钥匙,想去哪里就去哪里,但是万一手机丢失,你的支付宝或微信收付款功能没有上锁,那么捡到的人可能会打开你的收付款功能,去商场或超市刷你手机里的钱。为…

    2023年 6月 14日
  • qq炫舞手游衣服染色怎么调回来

    QQ炫舞手游中有的服饰是可以进行染色的,玩家只要积累足够的染色材料,就可以在工坊中的染色中给服饰染上自己自爱的颜色,服饰染色可以让角色的服饰更加个性化,并且最大化的提升了玩家的服饰…

    2023年 5月 20日
  • 和平精英来了?怎样的手机才能流畅吃鸡游戏

    一觉醒来,刺激战场就没了,毫无预告那种!火了一年的刺激战场就这么突然关服并永远的离开我们,大家都有点懵逼。不过好消息是,和平精英同步上线,并且前五名就能“大吉大利 今晚吃鸡”,只要…

    2022年 12月 26日
  • 如何在vivo手机上调节字体大小设置

    想要调整你的VIVO手机上的字体大小吗?别担心,这篇文章将会一步一步地指导你如何去操作。在主屏幕上找到设置图标,并点击进入。接下来你会看到一系列选项,包括无线和网络、显示与亮度等等…

    2023年 12月 21日
  • windows 10的3个使用小技巧

    windows 10是微软最新一代的个性化且高效的操作系统(以下简称win10)。它的很多使用小技巧会让我们大开眼界,下面就分享一下win10的3个使用小技巧。 1、搜索直达 在w…

    2023年 6月 16日
  • 手机突然黑屏该怎么办,手机突然黑屏的原因是什么

    有很多人在日常生活中使用手机的时候都会发生一些问题,就比如手机突然间黑屏了,有很多的人在遇到这样的问题得时候往往不知道该怎么办,首先就以为是不是手机坏了该买新手机了,其实也有这个可…

    2023年 5月 31日
  • qq邮箱第三方登录授权码怎么设置

    IT之家 10 月 11 日消息,QQ 邮箱团队今日向用户发出通知,为了保障 QQ 及 QQ 邮箱帐号的安全,将从 2022 年 11 月 1 日起,在使用 POP3 / IMAP…

    2023年 1月 1日
  • ios15值得更新不(ios16版本都有什么新功能)

    xdm,千呼万唤,iOS16 正式版终于来了。 相信很多小伙伴还在纠结到底要不要升级。 升级后有哪些好用的功能,会不会遇到大家说的手机卡,耗电快的问题。 别急,世超今天就带你们看下…

    2023年 2月 1日