获取常规文本字段中的光标位置

问题描述 投票:0回答:1

根据我的阅读,您可以使用 TextFieldValue 获取 BasicTextField 中的光标位置,如如何获取 TextField (Jetpack Compose) 的光标位置?.

中所述。

有没有办法获取常规文本字段中的光标位置?或者有什么解决办法吗?

kotlin android-jetpack-compose
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.