首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >构图:如何只对指定的屏幕改变状态条颜色?

构图:如何只对指定的屏幕改变状态条颜色?
EN

Stack Overflow用户
提问于 2022-08-20 09:28:03
回答 2查看 344关注 0票数 0

我有一个应用程序,其中除2-3个屏幕外的所有屏幕都有相同的状态条颜色。

因此,其目的是在打开此屏幕时更改statusbar颜色,并在此屏幕关闭时将statusbar颜色重置为默认颜色。

我正在尝试用DisposableEffect实现它。

代码语言:javascript
复制
DisposableEffect(Unit) {
    systemUiController.setStatusBarColor(color = anotherColor)
    onDispose {
        systemUiController.setStatusBarColor(color = defaultColor)
    }
}

它可以工作,但对于延迟,与TopAppBar不同步:

正确地实现它的方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-22 11:39:25

我认为拖延是不可避免的,我从来没有看到它立即改变。

我总是选择一个透明的状态栏+退出系统,自己处理所有事情。在系统栏杆后面画是新推荐的方法。由于您已经在使用撰写,这是非常容易的帮助伴奏库+撰写1.2.0内置的修饰符,以帮助这一点。

要求你的活动被布置得一边倒(在系统栏杆后面)

代码语言:javascript
复制
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    WindowCompat.setDecorFitsSystemWindows(window, false)
}

使用伴奏UIController库,将状态栏颜色设置为透明。

代码语言:javascript
复制
systemUiController.setSystemBarsColor(
    color = Color.Transparent,
    darkIcons = useDarkIcons
)

在你的堆肥,在需要的地方,消费适当的镶嵌。

代码语言:javascript
复制
Modifier.fillMaxSize()
        .statusBarsPadding() //status bar insets
        .navigationBarsPadding() //nav bar insets
        .systemBarsPadding() //both

编辑:您可以创建一个一次性效果包装,以切换系统图标,并使用它的任何地方,你需要。例如:(您可以改进这一点)

代码语言:javascript
复制
@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
            )
        }
    }
}
票数 4
EN

Stack Overflow用户

发布于 2022-08-20 12:51:29

如果您乐意为您的每个屏幕添加此代码片段,就我在我的手机上所能看到的情况而言,不会有任何延迟。基本上,您可以在本地设置颜色,而不是为整个应用程序/主题设置颜色。

代码语言:javascript
复制
val systemUiController = rememberSystemUiController()
SideEffect {
    systemUiController.setStatusBarColor(
        color = aColor
    )
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73425546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档