我正在尝试使用 TextField()
来自 Jetpack Compose。我希望文本颜色为白色。
我发现这是有效的:
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)
最佳答案
如Adrian Grygutis在 1.0.0
中的评论中指出, TextField
有一个参数colors
.您可以自定义您的 TextField
调用 TextFieldDefaults.textFieldColors(...)
与您要更改的参数。
TextField(
...
colors: TextFieldColors = TextFieldDefaults.textFieldColors(textColor = Color.White),
) {
至于主题,如果您想避免每次都调用:ProvideTextStyle(TextStyle(color = Color.White)) {
TextField(
...
)
}
你可以用你自己的 TextFieldColors
创建一个可组合的并将其作为参数添加到您的 TextField
中.例如,您可以将所有颜色设为白色:@Composable
fun MyAppTextFieldColors(
textColor: Color = Color.White,
disabledTextColor: Color = Color.White,
backgroundColor: Color = Color.White,
cursorColor: Color = Color.White,
errorCursorColor: Color = Color.White,
...
) = TextFieldDefaults.textFieldColors(
textColor = textColor,
disabledTextColor = disabledTextColor,
backgroundColor = backgroundColor,
cursorColor = cursorColor,
errorCursorColor = errorCursorColor,
...
)
为了避免在每个 TextField
中调用它,然后您可以创建自定义 MyAppTextField
对于调用默认 TextField
的应用程序与您的自定义 TextFieldColors
作为默认参数:@Composable
fun MyAppTextField(
value: String,
onValueChange: (String) -> Unit,
modifier: Modifier = Modifier,
...
colors: TextFieldColors = MyAppTextFieldColors(),
) {
TextField(
value = value,
onValueChange = onValueChange,
modifier = modifier,
...
colors = colors,
)
}
这样,您只需调用MyAppTextField
.如果需要,这是覆盖从主题继承的颜色的好方法。
关于android - 如何使用 MaterialTheme 覆盖 Jetpack Compose 中 TextField 中的文本颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66119935/