【问题标题】:Unexpected Text colour alpha in Jetpack Compose Material ThemeJetpack Compose Material Theme 中出现意外的文本颜色 alpha
【发布时间】:2022-10-25 18:16:10
【问题描述】:

我今天发现 MaterialTheme 将 alpha 应用于文本的颜色。正如您从所附示例中看到的那样,当我更改背景颜色时,文本的颜色似乎有所不同,因为它具有透明度值。我可以强制设置颜色(Text(color = MaterialTheme.colors.onBackground, ....)),这可以正常工作,但我不想对每个文本都这样做。

为什么 MaterialTheme 会这样做?如何覆盖此行为?

Compose 和 Material Compose 材质版本:1.2.1

@Preview
@Composable
private fun Preview_Playground() {
    MaterialTheme {
        Box(Modifier.background(Color.Green)) {
            Text("Test", fontWeight = FontWeight.ExtraBold, modifier = Modifier.alpha(1f))
        }
    }
}

【问题讨论】:

    标签: android android-jetpack-compose


    【解决方案1】:

    M2(androidx.compose.material) Text 的颜色由color 参数或应用TextStyle 定义。
    默认值为Color.Unspecified
    如果 color = Color.Unspecified 并且 style 没有设置颜色,这将是 LocalContentColorLocalContentAlpha.current 混合。

    在 Text.kt 中,您可以找到:

    val textColor = color.takeOrElse {
            style.color.takeOrElse {
                LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
            }
        }
    

    M3androidx.compose.material3)它不会发生,因为LocalContentColor.current 没有混合:

    val textColor = color.takeOrElse {
        style.color.takeOrElse {
            LocalContentColor.current
        }
    }
    

    如果您必须使用 M2,您可以为您的 Text 定义自定义组合,或者您可以更改整个应用程序主题中的 LocalContentAlpha(不仅是 Text):

    MaterialTheme(
        colors = colors,
        typography = Typography,
        shapes = Shapes
    ){
    
        CompositionLocalProvider(LocalContentAlpha provides 0.5f) {
            content()
        }
    }
    

    【讨论】:

    • 这样做是正确的。谢谢你。将颜色与当前 alpha 混合,并且 M2 中的默认 alpha 值 < 1 是真正的头部刮擦。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-31
    相关资源
    最近更新 更多