根据我的阅读,您可以使用 TextFieldValue 获取 BasicTextField 中的光标位置,如如何获取 TextField (Jetpack Compose) 的光标位置?.
中所述。有没有办法获取常规文本字段中的光标位置?或者有什么解决办法吗?
Jetpack Compose 有两个
TextField
可组合项。
接受
String
值的人
fun TextField(
value: String,
onValueChange: (String) -> Unit,
...
)
第二个接受
TextFieldValue
值
fun TextField(
value: TextFieldValue,
onValueChange: (TextFieldValue) -> Unit,
...
)
如果你想获取光标位置,你必须使用第二个接受
TextFieldValue
值的位置。因为,TextFieldValue
有selection
类型的TextRange
参数。您可以从selection
获取光标位置。
- 选择范围。如果选择是折叠的,则它代表光标位置。当选择范围超出范围时,会受到文本长度的限制。selection
我们可以这样实现
var greeting by remember {
mutableStateOf(
TextFieldValue(
text = "",
selection = TextRange.Zero
)
)
}
TextField(
value = greeting,
onValueChange = {
greeting = it
},
)
Button(
onClick = {
if (greeting.selection.collapsed) {
Log.d("CursorPosition", greeting.selection.end.toString())
}
},
) {
Text("Click me")
}
您也可以使用
selection.start
代替 selection.end
,两者具有相同的值。因为,只有当 greeting.selection.collapsed
和 true
值相等时,selection.start
才会是 selection.end
。