首页 > 解决方案 > Jetpack Compose TextField 中的 android:selectAllOnFocus

问题描述

传统EditText在 Android 上支持android:selectAllOnFocus属性,该属性会导致其内容在用户单击时被选中,例如单击EditText.

androidx.compose.material.TextField在 Jetpack Compose 中使用时如何实现此行为?

标签: androidandroid-jetpack-compose

解决方案


您可以从中收集焦点状态MutableInteractionSource并根据它更改选择状态:

var textFieldValue by remember { mutableStateOf(TextFieldValue("Lorem ipsum")) }
val interactionSource = remember { MutableInteractionSource() }
val isFocused by interactionSource.collectIsFocusedAsState()
LaunchedEffect(isFocused) {
    textFieldValue = textFieldValue.copy(
        selection = if (isFocused) {
            TextRange(
                start = 0,
                end = textFieldValue.text.length
            )
        } else {
            TextRange.Zero,
        }
    )
}
TextField(
    value = textFieldValue,
    onValueChange = { textFieldValue = it },
    interactionSource = interactionSource,
)

推荐阅读