首页 > 解决方案 > 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,
)

如何使它像已启用一样可点击?

标签: androidandroid-jetpack-composejetpack-compose-switch

解决方案


传递paidUserastrue将在单击Text或时切换开关Switch

传递paidUserasfalse将允许您导航到所需的屏幕。

@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是可选的。如果不需要,可以删除。


推荐阅读