android - 如何使用 MaterialTheme 覆盖 Jetpack Compose 中 TextField 中的文本颜色?

标签 android android-layout android-jetpack-compose android-jetpack-compose-text android-compose-textfield

我正在尝试使用 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 Grygutis1.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/

相关文章:

android - 如何在 Jetpack Compose 中实现这种布局

android-jetpack-compose - `MutableTransitionState` 有什么用?看起来 mutableStateOf 尽其所能同样出色

android - 如何将点击事件传递给框架布局中的重叠 View

java - Android 版 OpenCV 中的矩阵乘法

android - 在 Android 上的 Firefox 中删除默认输入内部阴影

android - 与设备相比,我在 android 中的布局预览显示不同

android - 在 Unity 中执行任务 ':launcher:processReleaseResources' 失败

java - 开发app每次都强制关闭

android - 带有图像的滚动列表上的 Android 应用程序内存不足

android - 如何使用 Jetpack Compose 在文本字段中添加国家代码前缀