12

在目前将我的应用程序转换为 Jetpack compose 时,在某些情况下我面临着一些问题来适应我当前的调色板。

我的 xml 文件中有一些TextInputLayout从我的主题上的 SECUNDARY 颜色继承了突出显示的文本颜色。

<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>

具有主题辅助颜色的 TextInputLayout - xml

问题是我TextField的 compose 继承了 PRIMARY 颜色的高亮文本颜色MaterialTheme

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

具有主题原色的 TextField - 撰写

我覆盖了colors参数,TextField但似乎没有一个会影响这种颜色。

colors是否有一种方法可以在不更改on的情况下覆盖 compose 上的突出显示颜色MaterialTheme?我想避免这种情况,因为它可能会导致使用相同主题的其他屏幕出现问题。

4

1 回答 1

21

文本和文本字段组件用于文本选择的颜色由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).

在此处输入图像描述

于 2021-08-14T06:20:41.260 回答