gpt4 book ai didi

android - 检测 Compose TextField 中的点击

转载 作者:行者123 更新时间:2023-12-04 12:09:31 25 4
gpt4 key购买 nike

我正在尝试为 Compose TextField 实现 onClick 处理程序。当前功能是处理 TextField 单击但禁用手动编辑该字段。对于我的用例,我想处理点击并做其他事情。我想保持 TextField 的外观和感觉,并希望焦点动画也能发生。
readOnly 属性从 UX 角度给了我想要的东西,但是当我单击 TextField 时,不会调用 onClick 处理程序。

TextField(
value = text,
onValueChange = { text = it},
readOnly = true,
modifier = Modifier
.clickable(onClick = {
Log.i("TextField", "Clicked")
})
)
我也尝试过使用pointerInput,我遇到了同样的问题。
TextField(
value = text,
onValueChange = { text = it},
readOnly = true,
modifier = Modifier
.pointerInput(Unit) {
detectTapGestures(onTap = {
Log.i("TextField", "Clicked")
}
}
)
由于 Compose 如此新,很难判断这是一个错误还是有意为之。

最佳答案

也许在文本字段中检测点击事件的更好方法是使用交互源。
第 1 步: - 创建交互源

 val source = remember {
MutableInteractionSource()
}
第 2 步: - 将其传递给文本字段
 OutlinedTextField(
value = text,
readOnly = true,
onValueChange = {},
textStyle = MaterialTheme.typography.body1.copy(
lineHeight = if (isFocused) 25.sp else TextUnit.Unspecified,
fontWeight = if (isFocused) FontWeight.SemiBold else FontWeight.Normal
),
label = {
Text(
text = label,
fontWeight = if (isFocused) FontWeight.SemiBold else FontWeight.Normal,
style = MaterialTheme.typography.caption
)
},
interactionSource = source,
colors = TextFieldDefaults.outlinedTextFieldColors(
textColor = if (isFocused) MaterialTheme.colors.primary else LocalContentColor.current
),
maxLines = if (isFocused) Int.MAX_VALUE else 2,
modifier = Modifier
.padding(
start = COUNTER_WIDTH + 16.dp,
top = padding,
bottom = padding,
end = 16.dp
)
.fillMaxWidth()
.verticalScroll(enabled = isFocused, state = rememberScrollState())
.animateContentSize(animationSpec = tween(DURATION))
)
步骤: 3- 收集压流作为状态并观察其变化。
 if ( source.collectIsPressedAsState().value)
onClicked()

关于android - 检测 Compose TextField 中的点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67493387/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com