Android Jetpack Compose 沉浸式状态栏的实现

目录

  • 概述
  • 效果展示
  • 代码实现
  • 总结

概述

说到沉浸式状态栏,很多小伙伴可能不太熟悉,其实让Android的状态栏的颜色和APP的主题颜色相同,给人感觉状态栏和APP就是一体的。沉浸式的状态栏让页面看起来更舒服,实现沉浸式状态栏也很简单,首先就是配置主题,然后设置状态栏的颜色,之前的博客中实现沉浸式状态栏是通过将状态栏的颜色设置成页面背景的颜色,这样状态栏就和背景融为一体了,但是这种办法在每个页面都需要设置一遍,非常费力,最好的 方式就是将状态栏设置成透明的颜色,然后将我们的页面"顶"到屏幕的顶部,而不是位于状态栏下面。下面就是实现沉浸式状态栏的方法

效果展示

如果没有实现沉浸式状态栏的界面如下所示:

在这里插入图片描述
我们可以看到状态栏的颜色和我们的页面背景色不相同,而且状态栏的颜色还会随着手机的不同而不同,这让界面看起来很不协调。而加了沉浸式状态栏后,效果如下:

在这里插入图片描述

我们发现加入沉浸式状态栏后界面和状态栏的颜色就融为一体了,不管是啥品牌的手机展示的效果都是一样的,这样就会让我们的界面看起来比较舒服。

代码实现

实现沉浸式状态栏我们首先需要引入一个库:

 // 系统UI控制库,实现沉浸式状态栏implementation("com.google.accompanist:accompanist-systemuicontroller:0.31.0-alpha")

使用这个库我们可以设置系统状态栏的颜色,查看状态栏和导航栏是否显示等功能。引入库后我们需要给我们应用添加一个主题。
在这里插入图片描述
主题的内容如下:
注意:设置主题时,我们需要使用包含NoActionBar的主题,否则我们的界面中会多出一个系统的ActionBar

<?xml version="1.0" encoding="utf-8"?>
<resources><style name="Theme.ImmersiveBar" parent="android:Theme.Material.Light.NoActionBar"/>
</resources>

主题的文件位置如下图所示:
在这里插入图片描述
配置完主题后我们就可以去修改系统状态栏的颜色了。

class MainActivity : ComponentActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContent {ImmersiveBarTheme {// A surface container using the 'background' color from the themeenableEdgeToEdge()val systemUiController = rememberSystemUiController()SideEffect {// 因为我们目前没有暗色主题的UI,所以都是亮色主题UI,我们默认使用暗色的状态栏ICON// ,防止出现标题栏字体颜色和UI背景融合的情况systemUiController.setSystemBarsColor(Color.Transparent, darkIcons = true)//window.statusBarColor = Color.Transparent.toArgb()}Surface(modifier = Modifier.fillMaxSize(),color = MaterialTheme.colorScheme.background) {Image(painter = painterResource(R.drawable.m11),contentDescription = null,contentScale = ContentScale.Crop,modifier = Modifier.fillMaxSize())}}}}
}

上面的代码中实现沉浸式状态栏的主要代码为

  enableEdgeToEdge()val systemUiController = rememberSystemUiController()SideEffect {// 因为我们目前没有暗色主题的UI,所以都是亮色主题UI,我们默认使用暗色的状态栏ICON// ,防止出现标题栏字体颜色和UI背景融合的情况// darkIcons 的值控制状态栏显示的图标字体样式systemUiController.setSystemBarsColor(Color.Transparent, darkIcons = true)//window.statusBarColor = Color.Transparent.toArgb()}

首先enableEdgeToEdge是让我们的界面可以”顶“到屏幕的最顶端,然后我们使用systemUiController将状态栏的颜色设置成透明的就可以实现沉浸式状态栏了,这里需要注意,我们设置状态栏颜色时需要放到SideEffect 或者是LaunchedEffect副作用API中,这样状态栏颜色才能设置成功,否者颜色会设置不成功导致无法实现沉浸式状态栏。这两个副作用API感兴趣的小伙伴可以去百度下,这里就不展开说了。

总结

本文主要介绍了在Android Compose下沉浸式状态栏的实现方法,实现沉浸式状态栏还有其他各种各样的方式,这里只是提供了一种,仅供参考。我们如果不想引入设置系统状态栏颜色的库,我们也可以去看下设置系统状态栏颜色使用的系统API,然后自己在代码中实现即可。如果读者有更好的沉浸式状态栏的实现方式,欢迎评论区讨论

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/465361.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Stable Diffusion 模型下载:DreamShaper(梦想塑造者)

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 DreamShaper 是一个分格多样的大模型&#xff0c;可以生成写实、原画、2.5D 等多种图片&#xff0c;能生成很棒的人像和风景图。 条目内容类型大模型基础模型SD 1…

vs2019 - signtool签名和验签的手工操作

文章目录 vs2019 - signtool签名和验签的手工操作概述笔记导入根证书时间戳服务器的选择code sign - 签名文件在代码签名(code sign)前后的区别签名后, 查看属性, 是正常的.用signtool命令行进行验签移除签名END vs2019 - signtool签名和验签的手工操作 概述 signtool是进行c…

django报错:Cannot use ImageField because Pillow is not installed

1、问题概述 ERRORS: accounts.User.avatar: (fields.E210) Cannot use ImageField because Pillow is not installed. HINT: Get Pillow at https://pypi.org/project/Pillow/ or run command "python -m pip install Pillow". System check identified 1 …

iOS AlDente 1.0自动防过充, 拯救电池健康度

经常玩iOS的朋友可能遇到过长时间过充导致的电池鼓包及健康度下降问题。MacOS上同样会出现该问题&#xff0c;笔者用了4年的MBP上周刚拿去修了&#xff0c;就是因为长期不拔电源的充电&#xff0c;开始还是电量一半的时候不接电源会黑屏无法开机&#xff0c;最后连着电源都无法…

Lua: 一门轻量级、高效的脚本语言

Lua: 一门轻量级、高效的脚本语言 在当今软件开发的领域中&#xff0c;寻找一门既灵活又高效的脚本语言&#xff0c;一直是开发者们追求的目标。Lua作为一门小巧、高效、可嵌入的脚本语言&#xff0c;已经成为了众多开发者的首选之一。无论是游戏开发、嵌入式系统、Web 开发还是…

《统计学简易速速上手小册》第8章:贝叶斯统计(2024 最新版)

文章目录 8.1 贝叶斯理论基础8.1.1 基础知识8.1.2 主要案例&#xff1a;疾病诊断8.1.3 拓展案例 1&#xff1a;垃圾邮件过滤8.1.4 拓展案例 2&#xff1a;财经新闻对股价的影响 8.2 贝叶斯方法的应用8.2.1 基础知识8.2.2 主要案例&#xff1a;个性化推荐系统8.2.3 拓展案例 1&a…

C#使用重载方法实现不同类型数据的计算

目录 一、涉及到的相关知识 1.重载的方法 2.Convert.ToInt32(String)方法 3.判断字符串是否带有小数点 二、实例 1.示例 2.生成成果 一、涉及到的相关知识 1.重载的方法 重载方法就是方法名称相同&#xff0c;但是每个方法中参数的数据类型、个数或顺序不同的方法。如果…

导数的几何意义【高数笔记】

1. 高数中的导数几何意义&#xff0c;与中学中斜率的联系 2. 导函数与导数的区别和联系又是什么 3. 导数的几何意义的题型是什么 4. 这些题型又有哪些区别 5. 点在曲线外和点在曲线上&#xff0c;需要注意什么 6. 法线和切线有什么关系 7. 法线是什么

《统计学简易速速上手小册》第6章:多变量数据分析(2024 最新版)

文章目录 6.1 主成分分析&#xff08;PCA&#xff09;6.1.1 基础知识6.1.2 主要案例&#xff1a;客户细分6.1.3 拓展案例 1&#xff1a;面部识别6.1.4 拓展案例 2&#xff1a;基因数据分析 6.2 聚类分析6.2.1 基础知识6.2.2 主要案例&#xff1a;市场细分6.2.3 拓展案例 1&…

git revert回退某次提交

请直接看原文: 【git revert】使用以及理解&#xff08;详解&#xff09;_git revert用法-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 前言 试验得知:用Reset HEAD方…

《CSS 简易速速上手小册》第8章:CSS 性能优化和可访问性(2024 最新版)

文章目录 8.1 CSS 文件的组织和管理8.1.1 基础知识8.1.2 重点案例&#xff1a;项目样式表结构8.1.3 拓展案例 1&#xff1a;使用BEM命名规范8.1.4 拓展案例 2&#xff1a;利用 Sass 混入创建响应式工具类 8.2 提高网页加载速度的技巧8.2.1 基础知识8.2.2 重点案例&#xff1a;图…

自然语言处理(NLP)—— 基本概念

自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能和语言学领域的一个分支&#xff0c;它涉及到计算机和人类&#xff08;自然&#xff09;语言之间的相互作用。它的主要目标是让计算机能够理解、解释和生成人类语言的数据。NLP结…