【问题标题】:Text Selection Not Working in Basic TextField when using TextRange使用 TextRange 时,文本选择在基本 TextField 中不起作用
【发布时间】:2021-08-24 14:23:07
【问题描述】:

当文本字段显示在屏幕上时,我想选择文本字段中的所有字符。当传递像 TextRange(2,2) 这样的相同索引时,它可以正常工作,但是当使用像 TextRange(0, name.length)) 这样的不同索引时,选择不起作用。我已经提到了下面的功能

@Composable
fun TestFunction(name: String) {
    var fieldValue by remember {
        mutableStateOf(TextFieldValue(name, selection = TextRange(0, name.length)))
    }

    val focusRequester by remember {
        mutableStateOf(FocusRequester())
    }

    DisposableEffect(Unit) {
        focusRequester.requestFocus()
        onDispose { }
    }

    BasicTextField(
        value = fieldValue,
        onValueChange = { fieldValue = it },
        modifier = Modifier.focusRequester(focusRequester),
    )
}

【问题讨论】:

  • 在我的情况下它有效:(2,2) 将指针放在第二个字符之后,(0, name.length) 突出显示整个文本,并被退格键删除。尝试删除字符,也许在您的情况下选择缺少颜色?带有“复制/粘贴/等”的选择句柄不可见,就像我用硬打开它一样,也许这就是你在说什么?添加对你不起作用的字符串,它可能是相关的。
  • 非常感谢! @PhilipDukhov,你真的拯救了我的一天。这是颜色的问题。我有白色作为原色。当改变颜色选择矩形是可见的。我仍然想知道为什么没有显示白色半透明颜色。

标签: android android-jetpack-compose


【解决方案1】:

选择颜色取决于您主题中的primary 和background 颜色。在内部使用的rememberTextSelectionColors 的source code 中可以看到。

所以如果你看不到选择,那可能是因为你的主题。

查看如何在不修改 this answer 中的主题的情况下覆盖此值。要使其适用于整个应用程序,您可以将此 CompositionLocalProvider 嵌入到您的主题中,如下所示:

@Composable
fun AppTheme(darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable() () -> Unit) {
    val colors = if (darkTheme) {
        DarkThemeColors
    } else {
        LightThemeColors
    }

    val customTextSelectionColors = TextSelectionColors(
        handleColor = Color.Red,
        backgroundColor = Color.Red.copy(alpha = 0.4f)
    )
    MaterialTheme(
        colors = colors,
        typography = typography,
        shapes = shapes,
    ) {
        CompositionLocalProvider(
            LocalTextSelectionColors provides customTextSelectionColors,
            content = content,
        )
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    相关资源
    最近更新 更多