我有一个应用程序,其中除2-3个屏幕外的所有屏幕都有相同的状态条颜色。
因此,其目的是在打开此屏幕时更改statusbar颜色,并在此屏幕关闭时将statusbar颜色重置为默认颜色。
我正在尝试用DisposableEffect实现它。
DisposableEffect(Unit) {
systemUiController.setStatusBarColor(color = anotherColor)
onDispose {
systemUiController.setStatusBarColor(color = defaultColor)
}
}它可以工作,但对于延迟,与TopAppBar不同步:

正确地实现它的方法是什么?
发布于 2022-08-22 11:39:25
我认为拖延是不可避免的,我从来没有看到它立即改变。
我总是选择一个透明的状态栏+退出系统,自己处理所有事情。在系统栏杆后面画是新推荐的方法。由于您已经在使用撰写,这是非常容易的帮助伴奏库+撰写1.2.0内置的修饰符,以帮助这一点。
要求你的活动被布置得一边倒(在系统栏杆后面)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
WindowCompat.setDecorFitsSystemWindows(window, false)
}使用伴奏UIController库,将状态栏颜色设置为透明。
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = useDarkIcons
)在你的堆肥,在需要的地方,消费适当的镶嵌。
Modifier.fillMaxSize()
.statusBarsPadding() //status bar insets
.navigationBarsPadding() //nav bar insets
.systemBarsPadding() //both编辑:您可以创建一个一次性效果包装,以切换系统图标,并使用它的任何地方,你需要。例如:(您可以改进这一点)
@Composable
fun initSystemUi(
useDarkIcons: Boolean = MaterialTheme.colors.isLight,
systemUiController: SystemUiController = rememberSystemUiController()
) {
DisposableEffect(Unit) {
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = useDarkIcons
)
onDispose {
systemUiController.setSystemBarsColor(
color = Color.Transparent,
darkIcons = useDarkIcons
)
}
}
}发布于 2022-08-20 12:51:29
如果您乐意为您的每个屏幕添加此代码片段,就我在我的手机上所能看到的情况而言,不会有任何延迟。基本上,您可以在本地设置颜色,而不是为整个应用程序/主题设置颜色。
val systemUiController = rememberSystemUiController()
SideEffect {
systemUiController.setStatusBarColor(
color = aColor
)
}https://stackoverflow.com/questions/73425546
复制相似问题