在 Jetpack Compose 中选择 TextField 的所有文本

问题描述

我在 Jetpack Compose 中使用 TextField 组件。 获得焦点时如何选择所有文本?

解决方法

在这种情况下,您应该使用 TextFieldValue 作为 TextField 的状态,当它获得焦点时,您使用 selection 状态设置 TextFieldValue

val state = remember {
    mutableStateOf(TextFieldValue(""))
}
TextField(
    value = state.value,onValueChange = { text -> state.value = text },modifier = Modifier
        .onFocusChanged { focusState ->
            if (focusState.isFocused) {
                val text = state.value.text
                state.value = state.value.copy(
                    selection = TextRange(0,text.length)
                )
            }
        }
)

结果如下:

enter image description here

请注意,根据您触摸的情况,光标会转到触摸的位置,而不是选择整个文本。您可以尝试弄清楚这是错误还是功能:)