android-jetpack-compose - 我们如何在 jetpack compose 中创建一个圆形复选框?
问题描述
通常可以使用修饰符将不同的形状分配给可组合项,但在此可组合项中没有这样做。
我希望图像中标记的部分是一个圆圈
你可以在下面看到我写的代码
@Composable
fun StandardCheckbox(
text: String = "",
checked: Boolean,
onCheckedChange: ((Boolean) -> Unit)?,
) {
Row(
Modifier.padding(horizontal = SpaceMedium)
) {
Checkbox(
modifier = Modifier
.clip(CircleShape),
checked = checked,
onCheckedChange = onCheckedChange,
enabled = true,
colors = CheckboxDefaults.colors(
checkedColor = MaterialTheme.colors.primary,
checkmarkColor = MaterialTheme.colors.onPrimary,
uncheckedColor = MaterialTheme.colors.onBackground.copy(alpha = 0.3f)
)
)
Spacer(modifier = Modifier.width(SpaceSmall))
Text(
text = text,
color = MaterialTheme.colors.primary,
modifier = Modifier.clickable {
if (onCheckedChange != null) {
onCheckedChange(!checked)
}
}
)
}
}
解决方案
下面的代码来自CheckboxImpl
可组合
Canvas(modifier.wrapContentSize(Alignment.Center).requiredSize(CheckboxSize)) {
val strokeWidthPx = floor(StrokeWidth.toPx())
drawBox(
boxColor = boxColor,
borderColor = borderColor,
radius = RadiusSize.toPx(),
strokeWidth = strokeWidthPx
)
drawCheck(
checkColor = checkColor,
checkFraction = checkDrawFraction,
crossCenterGravitation = checkCenterGravitationShiftFraction,
strokeWidthPx = strokeWidthPx,
drawingCache = checkCache
)
}
drawBox
将始终绘制一个圆角矩形。它不能被定制。
要实现圆形复选框,您需要编写自定义Composable
并绘制圆形而不是矩形。您可以使用RadioButton
和CheckboxImpl
可组合作为参考。
推荐阅读
- java - Junit:期望 / assertThrows 不起作用
- ios - 提交长文本时iOS应用程序崩溃
- android - 我有一个问题,似乎与settings.gradle有关,但我不知道如何解决它,而且由于某种原因它一直显示红色字母
- c# - WPF 以编程方式绑定 TextBlock 运行
- php - 链接 Paypal Html 脚本和 webhook
- r - 多对列的配对 T 检验(宽数据格式)
- mysql - 将列中的逗号分隔值转换为行
- c# - 如何检测图像在网格中的正确位置 - wpf
- docker - gpg keyserver 接收失败 没有名字
- c++ - 由于没有文件或目录,在 VSC 上运行代码的问题