android - Jetpack Compose 中复选框中的透明复选标记

标签 android kotlin checkbox android-jetpack-compose

在我的 Compose 应用程序中,我需要创建一个圆形复选框。我已经通过下面的代码实现了这一点:

@Composable
fun CircleCheckBox(
    isChecked: Boolean,
    modifier: Modifier = Modifier,
    onChecked: () -> Unit = {},
    checkedBackgroundColor: Color,
    unCheckedBackgroundColor: Color,
    checkedIconColor: Color,
    unCheckedIconColor: Color
) {
    Box(
        modifier = modifier
            .clip(CircleShape)
            .clickable { onChecked() }
            .border(
                width = if (!isChecked) 1.dp else 0.dp,
                color = if (!isChecked) checkedBackgroundColor else Color.Transparent,
                shape = CircleShape
            )
            .background(
                color = if (isChecked) checkedBackgroundColor else unCheckedBackgroundColor,
                shape = CircleShape
            ),
        contentAlignment = Alignment.Center
    ) {
        Icon(
            imageVector = Icons.Default.Check,
            contentDescription = stringResource(R.string.icon_check),
            modifier = Modifier.padding(3.dp),
            tint = if (isChecked) checkedIconColor else unCheckedIconColor
        )
    }
}

但是在我的应用程序中,我的卡片上有渐变背景,所以我想让复选标记透明,但在这种实现中,由于盒子的背景,这是不可能的。有什么方法可以实现它,如下图所示?

Checkboxes example

Checkboxes example 2

最佳答案

您可以找到合适的默认图标,而不是自己绘制。 Icons.Default.CheckCircle 就是您正在寻找的东西 - 它在实心圆圈内有透明的复选标记。您可以使用 Icons.Outlined.Circle 代替边框修饰符:

@Composable
fun CircleCheckBox(
    isChecked: Boolean,
    modifier: Modifier = Modifier,
    onChecked: () -> Unit = {},
    color: Color,
) {
    Box(
        contentAlignment = Alignment.Center,
        modifier = modifier
            .clip(CircleShape)
            .clickable { onChecked() }
    ) {
        Icon(
            imageVector = if (isChecked) Icons.Default.CheckCircle else Icons.Outlined.Circle,
            contentDescription = stringResource(R.string.icon_check),
            tint = color
        )
    }
}

结果:

关于android - Jetpack Compose 中复选框中的透明复选标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70548904/

相关文章:

android - 如何启动 Genius Scan 意向

android - 为什么 LiveLiteralsKt 会导致运行时问题?

android - Databinding V2 和 kotlin,我找不到我的 BT?

android - Dagger 2、Cicerone、Kotlin - 注入(inject)问题

javascript - 如何引用复选框数组名称值?

javascript - JQuery 复选框循环

android - Xamarin AndroidClientHandler 发送客户端证书

java - Android Studio自动删除txt文件中的多余空格

jsp - 如何使用Struts 2添加checkbox值暂存并放到session obj中

android - Preference 的 onCreateView 和 onBindView 方法的区别