Fri*_*ice 7 android android-jetpack-compose android-compose-textfield android-jetpack-compose-material3
今天我发现 MaterialTheme 对文本颜色应用了 alpha 值。正如您从所附示例中看到的,当我更改背景颜色时,文本的颜色似乎有所不同,因为它具有透明度值。我可以强制设置颜色 ( Text(color = MaterialTheme.colors.onBackground, ....)) 并且这可以正常工作,但我不想对每个文本都执行此操作。
MaterialTheme 为什么要这样做?我该如何覆盖这种行为?
Compose 和 Material Compose Material 版本:1.2.1
@Preview
@Composable
private fun Preview_Playground() {
MaterialTheme {
Box(Modifier.background(Color.Green)) {
Text("Test", fontWeight = FontWeight.ExtraBold, modifier = Modifier.alpha(1f))
}
}
}
Run Code Online (Sandbox Code Playgroud)
对于M2 ( androidx.compose.material), 的颜色Text由color参数或应用TextStyle.
默认值为Color.Unspecified。
如果 color =Color.Unspecified且 style 没有设置颜色,则会LocalContentColor与LocalContentAlpha.current.
在 Text.kt 中您可以找到:
val textColor = color.takeOrElse {
style.color.takeOrElse {
LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
}
}
Run Code Online (Sandbox Code Playgroud)
对于M3 ( androidx.compose.material3) 它不会发生,因为LocalContentColor.current没有混合:
val textColor = color.takeOrElse {
style.color.takeOrElse {
LocalContentColor.current
}
}
Run Code Online (Sandbox Code Playgroud)
如果您必须使用 M2,您可以为您的 定义一个自定义可组合项Text,或者您可以更改LocalContentAlpha整个应用程序的主题(不仅仅是Text):
MaterialTheme(
colors = colors,
typography = Typography,
shapes = Shapes
){
CompositionLocalProvider(LocalContentAlpha provides 0.5f) {
content()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
926 次 |
| 最近记录: |