如何在Jetpack Compose中获取TextField的光标位置?

4
对于常规的EditText,我们可以调用getSelectionStart()方法来获取光标位置。在Jetpack Compose中,对于ClickableText这个功能是可用的,但对于TextField或OutlinedTextField似乎不可用。
有没有人遇到这个问题并知道如何解决?

1
你可以使用 TextFieldValue。请检查这个答案是否对你有帮助。 https://dev59.com/D1EG5IYBdhLWcg3wTp2y#68245465 - nglauber
很抱歉,@nglauber。我知道如何将选择添加到TextField中,但我想知道如何通过单击TextField中的文本来获取光标位置(偏移量)。 - San
你可以使用VisualTransformation和OffsetMapping。https://medium.com/@banmarkovic/how-to-create-currency-amount-input-in-android-jetpack-compose-1bd11ba3b629 - Arpit Patel
1个回答

3
对于普通的EditText,我们可以调用getSelectionStart()方法来获取光标位置。这是因为EditText是有状态的。
在Jetpack Compose中,ClickableText具有此功能,但似乎TextField或OutlinedTextField没有。
Composables是无状态的。
有人遇到过这个问题并知道如何解决吗?
在BasicTextField()和相关的composables中,使用状态为TextFieldValue的组合,然后TextFieldValue的selection属性具有TextRange,您可以使用它来获取光标位置。请参阅链接以了解详细信息。

谢谢您的回答,但显然这不是我需要的。我想通过点击TextField(或例如OutlinedTextField)来获取偏移位置。我知道TextFieldValue有一个select属性,但它无法帮助通过在TextField中单击文本来获取光标位置。 - San
3
@San:selection 的文档中写道:“如果选择已折叠,则表示光标位置”。这似乎与 EditText 中的 getSelectionStart() 一样适用于您的情况。 - CommonsWare
是的,你说得对。我通过点击文本来检查TextFieldValue.selection.start,并且它包含当前光标位置。非常感谢! - San

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接