如何更改 jetpack compose 中文本字段光标位置

Mat*_*haN 37 android-jetpack-compose android-jetpack-compose-text

我在文本字段上方有文本建议芯片视图列表,当用户单击芯片时,我将文本附加到文本字段中。之后我想将光标移动到结束位置。我在 Jetpack compose 中找不到此问题的解决方案。之前我们曾经editText.setSelection(position)在 Android 视图中更改光标位置。

如何在jetpack compose Textfield中设置光标位置?

         OutlinedTextField(
                    value = value,
                    onValueChange = { value = it },
                    maxLines = 8,
                    label = {
                        Text(
                            text = "Content",
                            maxLines = 1
                        )
                    },

                    modifier = Modifier
                        .fillMaxWidth()
                        .height(200.dp),
                    shape = RoundedCornerShape(2.dp),

                    )
Run Code Online (Sandbox Code Playgroud)

Cur*_*aph 52

我们可以用来TextFieldValue改变光标位置

TextFieldValue像这样初始化

 var textFieldValueState by remember {
        mutableStateOf(
            TextFieldValue(
                text = ""
            )
        )
    }
Run Code Online (Sandbox Code Playgroud)

初始化后设置TextFieldValue如下

OutlinedTextField(
    value = textFieldValueState,
    onValueChange = { textFieldValueState = it },
    ...
    )
Run Code Online (Sandbox Code Playgroud)

要附加附加文本并进行光标选择,请按照下列步骤操作

IconButton(modifier = Modifier.then(Modifier.size(48.dp)),
     onClick = {
        val value = textFieldValueState.text.plus("****")
        textFieldValueState = TextFieldValue(
        text = value,
        selection = TextRange(value.length-2)
        )
     })
Run Code Online (Sandbox Code Playgroud)

参考图像

TextFieldValue text并且selection变量是不可更改的,因此我们需要创建新的变量TextFieldValue来设置文本和光标位置。