【问题标题】:How do you make a text clickable in jetpack compose ? I would also like to toggle it to non clickable after selecting once如何在 jetpack compose 中使文本可点击?我还想在选择一次后将其切换为不可点击
【发布时间】:2022-10-21 15:39:18
【问题描述】:
        Text(
            text = "Resend OTP",
            fontSize = 20.sp,
            color =  Textfieldcolor,
            style = TextStyle(textDecoration = TextDecoration.Underline)
        )

//This is my code this text should be selectable once and then be disabled .

【问题讨论】:

  • 您可以使用按钮(可能是 TextButton)。它同时接受 onClick lambda 和 enabled 布尔值。

标签: android-studio kotlin text android-jetpack-compose android-jetpack


【解决方案1】:

您可以添加clickable 修饰符或使用ClickableText

var enabled by remember { mutableStateOf(true)}

ClickableText(
    text = AnnotatedString(text) ,
    onClick = {
        if (enabled) {
            enabled = false
            text = "Disabled"
        }
    })

【讨论】:

  • 嗨,谢谢你 !我使用了这个,但看起来文本在使用一次后仍然可以点击。我应该为启用的真假状态给出一个 if 吗?
  • @Shehar 对不起,我的错。我已经更新了答案。
  • 谢谢。我不确定可点击性是否被禁用-我无法从我的模拟器中弄清楚。但是我将相应的 toast 消息添加到相应的状态并且它们运行良好。
【解决方案2】:

就像@Arpit 提到的那样,最好使用TextButton 来达到这个目的。 但是如果你绝对想使用Text,你可以使用下面的sn-p。

@Composable 
fun OneTimeClickableText(text : String, onClick : () -> Unit){
    var enabled by rememberSaveable{ mutableStateOf(true)}
    Text(
        modifier = Modifier
            .clickable(enabled = enabled) {
                enabled = false
                onClick()
            },
        text = text
    )
}

也就是说,我这段代码严格用于一次性可点击文本。我不建议将它用于 OTP 按钮之类的东西;因为除非他们重新启动您的应用程序,否则用户将无法单击它。您可以拉出enabled 变量并从外部对其进行管理(例如,将其禁用一段时间而不是永久禁用)。

【讨论】:

  • 你好谢谢 !我决定使用可点击的文本,但即使将启用设置为 false,我似乎也无法禁用它。我现在尝试使用 textbutton。
  • 我认为没有办法禁用ClickableText(尽管我在这里可能错了。)TextButton 应该可以正常工作。请务必将enabled 传递给按钮的enabled 参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多