如何在 Jetpack Compose 上更改 TextField 的突出显示文本颜色?

How to change TextField's highlighted text color on Jetpack Compose?

目前正在将我的应用程序转换为 Jetpack compose,在某些情况下,我在调整当前调色板时遇到了一些问题。

我的 xml 文件中有一些 TextInputLayout 继承了我主题中 SECUUNDARY 颜色的高亮文本颜色。

<style name="Theme.MyApp" parent="Theme.MaterialComponents.Light.NoActionBar">
    ...
    <item name="colorPrimary">@color/blue</item>
    <item name="colorPrimaryVariant">@color/blue</item>
    <item name="colorSecondary">@color/red</item>
    <item name="colorSecondaryVariant">@color/red</item>
    ...
</style>

问题是我的 TextField 撰写时继承了 MaterialTheme 上的主要颜色的突出显示文本颜色。

MaterialTheme(
    colors = Colors(
        primary = Color.Blue,
        ...
        secondary = Color.Red,
        ...
    ),
    content = content,
    typography = MaterialTheme.typography,
    shapes = MaterialTheme.shapes,
) {
   TextField(...)
}

我覆盖了 TextField 上的 colors 参数,但 none 似乎影响了这个颜色。

是否可以在不更改 MaterialTheme 上的 colors 的情况下覆盖撰写时的突出显示颜色?我想避免这种情况,因为它可能会在使用相同主题的其他屏幕上引起问题。

文本和文本字段组件用于文本选择的颜色由 LocalTextSelectionColors.current 提供。

您可以提供自定义 TextSelectionColors 使用:

val customTextSelectionColors = TextSelectionColors(
    handleColor = Red,
    backgroundColor = Red.copy(alpha = 0.4f)
)

CompositionLocalProvider(LocalTextSelectionColors provides customTextSelectionColors) {
    TextField(
        value = text,
        onValueChange = { text = it },
        colors = TextFieldDefaults.textFieldColors(cursorColor = Red)
    )
}

如果您还想更改光标颜色,请添加 colors = TextFieldDefaults.textFieldColors(cursorColor = Red).