我正在尝试使用 Jetpack Compose 中的 TextField()
。我希望文本颜色为白色。
我发现这是有效的:
ProvideTextStyle(TextStyle(color = Color.White)) {
TextField(
...
)
}
但是,我想在主题级别覆盖它,这样我就不需要重复写ProvideTextStyle
。我看到 MaterialTheme
只接受以下参数:
@Composable
fun MaterialTheme(
colors: Colors = MaterialTheme.colors,
typography: Typography = MaterialTheme.typography,
shapes: Shapes = MaterialTheme.shapes,
content: @Composable () -> Unit
)
所以我不知道该怎么做。有人可以帮忙吗?
(撰写版本 = 1.0.0-alpha11)
答案 0 :(得分:2)
您可以使用所需的 TextField
创建自己的 color
小部件并在所有地方使用它,
@Composable
fun ColoredTextField(value: String, onValueChange: (String) -> Unit){
ProvideTextStyle(TextStyle(color = Color.White)) {
TextField(value = value, onValueChange = onValueChange)
}
}
现在开始使用 ColoredTextField
而不是 TextField
,通过更改 color
中的 Widget
,它会应用于所有地点。
答案 1 :(得分:1)
对于 1.0.0-beta06
,TextField
contentColor 基于 LocalContentColor.current
。您可以使用 CompositionLocalProvider
提供自定义 LocalContentColor
。
您可以定义一个自定义函数,例如:
@Composable
fun ContentColorComponent(
contentColor: Color = LocalContentColor.current,
content: @Composable () -> Unit
) {
CompositionLocalProvider(LocalContentColor provides contentColor,
content = content)
}
它可以与许多组件一起使用,例如 TextField
:
ContentColorComponent(contentColor = Color.Blue) {
TextField(
value = text,
onValueChange = { text = it },
label = { Text("Label") }
)
}
答案 2 :(得分:0)
原始 style.xml 可以通过以下方式定义:
<item name="android:textColorPrimary">@color/textColorPrimary</item>
设置
现在你可以在 theme.kt 中定义一个:
val colorSecondary = Color(......)
例如:
private val DarkColorPalette = darkColors(
primary = colorPrimary,
primaryVariant = colorPrimary,
secondary = colorSecondary)
?希望能帮到你!
答案 3 :(得分:0)
在 1.0.0-beta07
中,您可以使用 textStyle
属性来覆盖样式,从而覆盖内容颜色。另请参阅Styling TextField。
TextField(
...
textStyle = TextStyle(color = Color.Blue)
)
答案 4 :(得分:0)
我想在主题级别覆盖它
在您的应用的可组合主题中修改 MaterialTheme
可组合的内容以包含 TextStyle。
@Composable
fun MyAppTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
content: @Composable() () -> Unit
) {
val colors = if (darkTheme) {
DarkColorPalette
} else {
LightColorPalette
}
MaterialTheme(
colors = colors,
typography = Typography,
shapes = Shapes,
content = {
ProvideTextStyle(
value = TextStyle(color = Color.White),
content = content
)
}
)
}
现在您提供的 TextStyle
将用于应用主题级别。
setContent {
MyAppTheme {
// app content
}
}