这是我参与更文挑战的第9天,活动详情查看: 更文挑战
本文翻译自 Accompanist 官方文档 – SystemUiController
目前有一个正在进行的 Jetpack Compose中文手册 项目,旨在帮助开发者更好的理解和掌握 Compose 框架,目前仍还在开荒中,欢迎大家进行关注与加入!
这篇文章由 @易冬 同学翻译撰写,目前已经发布到该手册中,欢迎进行查阅。
请关注微信公众号
Jetpack Compose 博物馆
获取更多 Compose 技术信息。
概述
System UI Controller 提供简单易用的方法帮助开发者在 Jetpack Compose 中更新系统栏(Android 平台上指状态栏和导航栏)的颜色。
用法
开发者若想在 Compose 布局中控制 System UI,就必须获取 SystemUiController
对象。通过该库提供 rememberSystemUiController
函数,开发者可以获取当前操作系统(目前仅支持 Android 系统)的 SystemUiController
对象。
开发者可以通过如下方式在布局中更新系统栏(Android 平台上指状态栏和导航栏)的颜色:
// Remember a SystemUiController
val systemUiController = rememberSystemUiController()
val useDarkIcons = MaterialTheme.colors.isLight
SideEffect {
// Update all of the system bar colors to be transparent, and use
// dark icons if we're in light theme
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = useDarkIcons
)
// setStatusBarsColor() and setNavigationBarsColor() also exist
}
复制代码
状态栏图标颜色
该库在 Android 平台上使用时,可自动处理 API 版本差异。比如,Android 原生从 API 23 才开始支持状态栏深色图标,那么针对低版本设备,该库通过使用 Scrim 自动调整状态栏颜色以此来保持状态栏整体的对比度:
同理,由于Android 原生从 API 26 以后才支持导航栏深色图标,针对低版本设备 SystemUiController
也会采用相同的处理方式。
调整 Scrim 逻辑
如果开发者对 SystemUiController
自动处理的颜色不太满意,亦可自行处理:
systemUiController.setStatusBarsColor(
color = Color.Transparent,
darkIcons = true
) { requestedColor ->
// TODO: return a darkened color to be used when the system doesn't
// natively support dark icons
}
复制代码
示例
Insets 示例 中的透明系统栏(Android 平台上指状态栏和导航栏)都是通过SystemUiController
实现,若有需要,请自行查阅。
下载
repositories {
mavenCentral()
}
dependencies {
implementation "com.google.accompanist:accompanist-systemuicontroller:<version>"
}
复制代码
每个版本可以在 快照仓库 中被找到,每次提交时都会更新。