是否可以使用Modifier.clickable获取单击的文本的值



这是我的场景,我需要获得点击文本的文本值:

@Composable
fun keyboard(){
val letters: Array<Pair<String, String>> = letterMap.toList().toTypedArray();
val txtModifier = Modifier
.clickable(onClick = { btnTapAction( /* send a letter */ ) })
for(i in 0..3)
Row(){
for(j in (i*8)..(i*8+7))
if (j<30)
Text(letters[j].first, txtModifier)
}
}

我有30个Text,每个都包含一个西里尔字母,它们就像键盘按钮一样,我想把点击的字母发送到处理输入字母的函数btnTapAction((。

我看过文件,找不到方法,但我希望能做到?

如果您希望返回点击项目的值,请使用状态提升创建一个单独的可组合

@Composable
fun Keyboard(){
val letters: Array<Pair<String, String>> = letterMap.toList().toTypedArray();
val txtModifier = Modifier// You can do some styling here such as rounded shape, etc
for(i in 0..3)
Row(){
for(j in (i*8)..(i*8+7))
if (j<30)
Letter( txtModifier, letters[j].first){char:String->
// You can pass this letter from keyboard to parent Composable using another callback or process here
}
}
}

@Composable
private fun Letter(modifier: Modifier = Modifier, char: String, onClick: (String) -> Unit) {
Text(text = char,
modifier = modifier.clickable {
onClick(char)
}
)
}

编辑

最初的问题就像是一个获取文本中字母位置的问题,你想获取文本中任何字符的位置,你可以在下面使用答案

您可以使用ClickableTextComposable来获取点击的位置

val context = LocalContext.current
val text = "Some clickable text"
ClickableText(
text = buildAnnotatedString {
append(text)
},
onClick = { position: Int ->
Toast.makeText(
context,
text.substring(startIndex = 0, endIndex = position),
Toast.LENGTH_SHORT
).show()
}
)

相关内容

最新更新