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

相关推荐

  • 为什么总是豌豆荚服务已停止

    就在昨天,豌豆荚团队发布公告称,由于业务调整,豌豆荚PC版将从2月28日开始停止在线服务的提供。无独有偶,4天之前百度也发布公告,称将不再支持91和安卓市场渠道的渠道包上传和管理等…

    2023年 3月 21日
  • 官网买的iphone需要验机吗

    如果你购买的是全新的iPhone,在拆封前可以找到外包装上的序列号,先查询一下序列号,会显示【未激活,请先激活】。 如果你已经激活了,可以在验机的时候看一下激活日期,是否和你激活这…

    2023年 5月 4日
  • 按键精灵怎么用(按键精灵怎么用别人的脚本)

    按键精灵安卓版怎么用?按键精灵是一款非常强大的模拟动作制作软件,通过制作脚本就可以让按键精灵代替你的双手,自动执行你想要的一系列执行动作,就好比你雇了一个人来帮你挂机干活。按键精灵…

    2023年 12月 11日
  • 联想手机如何操作recovery模式

    重置手机:如何恢复出厂设置 联想手机固件升级:如何进行系统升级 经常使用手机的朋友都知道,当系统出现问题的时候,我们经常会使用“恢复出厂设置”,但是如果系统都进不去了,该如何将手机…

    2023年 3月 11日
  • 如何发朋友圈,如何发朋友圈文字

    我们可以通过微信朋友圈发表文字,图片和视频,也可以分享文章或者音乐。每天对好友发的照片或者视频进行“评论”或“点赞”,也是一种社交方式!今天小丽教大家如何发朋友圈! 带图片发朋友圈…

    2023年 8月 16日
  • QQ内测「微信登录」:爷青回,一下子给绑上!

    “给你们最新最快的QQ内测更新资讯!” 近期的科技热搜关于今天要写的文章主题是一致的,我想大家肯定也是超级的好奇今天的这篇文章,毕竟对于部分小伙伴来说QQ可能已经陪伴了你过完了整个…

    2024年 1月 16日
  • oppoa11升级了怎样降级(oppoa11手机怎么降级系统版本)

    买来新手机后随着使用时间的越来越长,手机厂家会对手机系统进行不定时的更新,完成对手机系统的优化或新增一些功能,有时新系统用不惯想回到老系统,那OPPO A11手机究竟怎样升级/降级…

    2023年 10月 9日
  • 自制手写电容笔(浙江手写电容笔使用方法)

    看到有人自己做电容笔,就试了一下,真的可以,网上说直接把锡纸夹个笔对折了使用,觉得太难看,就找了个不用的水笔,用笔帽的一头,尺寸也差不多,用双面胶贴上,挺好用。注意接触面要稍大一点…

    2023年 4月 10日
  • 苹果通讯录怎么删除,苹果通讯录怎么删除分组

    苹果通讯录怎么删除 在苹果设备中,删除通讯录可以按照以下步骤进行操作: 1. 打开“通讯录”应用,可以在主屏幕中找到该应用。 4. 确认删除,如果需要,可以输入密码进行确认。 5….

    2023年 9月 13日
  • 微信拍怎么加文字表情音乐

    分享最实在的玩机技巧,洞察最前沿的科技资讯!大家好,这里是手机科技园! 我们每天都在用微信聊天,经常跟朋友分享视频,其实用微信拍视频可以添加字幕、音乐、表情,还能剪辑,简单实用又方…

    2023年 1月 9日