当一个TextField获得焦点时,我如何将光标设置在随机位置上?在经典的Android视图系统中,相当于
editText.setSelection(position)
。以下是我用来使编辑文本在加入屏幕时自动接收焦点的代码。我想能够移动默认位置0处的光标。val (getText, setText) = remember { mutableStateOf("hello") }
AutofocusEditText(
text = getText,
setText = setText
)
...
@Composable
private fun AutofocusEditText(
text: String,
setText : (String) -> Unit
) {
val focusState = remember { mutableStateOf(FocusState.Inactive) }
val focusRequester = FocusRequester()
val focusModifier = Modifier.focus()
Row(
modifier = Modifier.focusObserver { newFocusValue -> focusState.value = newFocusValue }
) {
val focusRequesterModifier =
Modifier.focusRequester(focusRequester)
TextField(
value = text,
modifier = focusModifier.then(focusRequesterModifier),
backgroundColor = Color.Transparent,
onValueChange = setText,
keyboardOptions = KeyboardOptions.Default.copy(
imeAction = ImeAction.Done
),
onImeActionPerformed = { action, softKeyboardController ->
if (action == ImeAction.Done) {
softKeyboardController?.hideSoftwareKeyboard()
}
}
)
}
onActive {
focusRequester.requestFocus()
}
}
TextField
应该有一个可选的构造函数参数autoFocus: AutoFocus = AutoFocus.Start
,这样开发者就不必强制自己编写解决方案。 - kc_devTextFieldValue
的函数重载,怎么办?如果没有其他选项,那么其他重载就会自动变得无用。Compose已经稳定运行了近2年,这怎么能被接受呢? - Mark