@Composable
fun MyScreen() {
var textState by remember { mutableStateOf("Hello, world!") }
val focusRequester = remember { FocusRequester() }
Column(
modifier = Modifier.padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
BasicTextField(
value = TextFieldValue(textState, selection = TextRange(textState.length)),
onValueChange = { textState = it.text },
modifier = Modifier
.fillMaxWidth()
.focusRequester(focusRequester),
)
Button(
onClick = {
// Request focus and set the cursor at the end of the text when the button is clicked
focusRequester.requestFocus()
},
modifier = Modifier.padding(top = 16.dp)
) {
Text("Move Cursor to End")
}
}
}
字符串 val focusRequester = remember { FocusRequester() }:此行使用remember函数声明了一个FocusRequester对象。FocusRequester用于通过编程方式请求关注BasicTextField。 点击按钮后,调用focusRequester.requestFocus(),通过编程方式请求对BasicTextField进行聚焦。
2条答案
按热度按时间9rnv2umw1#
要设置光标,您需要像这样设置TextFieldValue的选择:
字符串
请记住,您需要自己从onValueChange更新选择,否则用户无法移动光标或键入/delete。
对于单行,您需要在TextField Composable上设置一个固定的高度,并且您可能希望从用户输入中清理'\n'。
型
对于后者,我清理新文本并比较它和状态文本的长度,如果新文本更短,我不必更新状态,因为我只是在清理过程中删除了字符。如果您只是想阻止用户自己添加新行,则可以不限制高度。
前面的解决方案忽略了一个带有换行符的粘贴文本,如果你想保留它,这个onValueChange实现应该正确处理它:
型
qacovj5a2#
字符串
val focusRequester = remember { FocusRequester() }
:此行使用remember函数声明了一个FocusRequester对象。FocusRequester用于通过编程方式请求关注BasicTextField。点击按钮后,调用focusRequester.requestFocus(),通过编程方式请求对BasicTextField进行聚焦。
的数据