android - jetpack compose 中禁用但可点击的开关
问题描述
我有一个禁用的开关,但我仍然希望它可以点击。我试图添加一个clickable
修饰符,但是当按下开关本身时它仍然不会注册点击
Switch(
modifier = Modifier
.clickable(
enabled = myBool,
onClick = onSwitch,
indication = null,
interactionSource = remember { MutableInteractionSource() },
)
.constrainAs(actionButton) {
top.linkTo(text.top)
end.linkTo(parent.end)
},
interactionSource = interactionSource,
checked = switchChecked,
enabled = if (myBool) false else actionButtonEnabled,
onSwitch = onSwitch,
)
如何使它像已启用一样可点击?
解决方案
传递paidUser
astrue
将在单击Text
或时切换开关Switch
。
传递paidUser
asfalse
将允许您导航到所需的屏幕。
@Composable
fun DisabledClickableSwitch1(
paidUser: Boolean,
) {
var checked by remember {
mutableStateOf(false)
}
val onCheckedChange = {
if (paidUser) {
checked = !checked
} else {
// Navigate to the require screen to show info about the paid feature here
Log.e("Test", "Navigate from here")
}
}
Row(
modifier = Modifier
.fillMaxWidth()
.clickable {
onCheckedChange()
}
.padding(16.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.SpaceBetween,
) {
Text("Enable Paid Feature")
Switch(
checked = checked,
enabled = paidUser,
onCheckedChange = null,
)
}
}
标签Text
是可选的。如果不需要,可以删除。
推荐阅读
- c# - LINQ - 对于选择中的每个项目,将值填充到一个未填充的属性
- assembly - Mips 参考表上的“PC”
- android - android kotlin 视图绑定 IllegalStateException 不能为空
- python - 我想使用 selenium 从表中获取内容到数组
- gcc - SFML 2.5.1 和带有 GCC 5.1.0 的 CodeBlocks - 项目编译错误
- html - 如何修复“文本动画”?
- mongodb - 如何更新可以出现在文档中不同位置的字段?
- oracle-apex - 数据库插入/更新后更新应用程序项
- r - 为什么我无法在浏览器中更改 numericInput() 值?
- react-native - 最终触发器上的 FlatList 加载... React Native