Skip to content

Checkbox 复选框 ​

受控复选框,支持半选(indeterminate)与禁用。

契约源:lh-ui-core/specs/checkbox.json · 黄金用例:cases/checkbox.json(6 条,已翻译为 JVM 单测 + Compose UI Test)

状态 ​

选中 / 半选为实心主色底 + onPrimary 指示符(勾形 / 横杠),未选为只描边。

9:41Checkbox

HTML 模拟预览(Android / Compose 外观),非真机渲染

kotlin
var checked by remember { mutableStateOf(false) }
LhCheckbox(
  checked = checked,
  onCheckedChange = { checked = it },
  label = "同意协议",
)

尺寸 ​

三档方框尺寸映射到 checkbox.size.* 令牌。

9:41Checkbox 尺寸

HTML 模拟预览(Android / Compose 外观),非真机渲染

API ​

Props ​

属性说明类型默认值
checked是否选中(必填)Boolean—
onCheckedChange选中态变更回调,携带新选中态(Boolean) -> Unit—
indeterminate是否半选(不确定态)Booleanfalse
disabled是否禁用Booleanfalse
label标签文字String?null
size方框尺寸LhCheckboxSizeMedium
labelContent标签内容(覆盖 label,spec 的 default 插槽)@Composable (() -> Unit)?null
modifier修饰符ModifierModifier

LhCheckboxSize ​

值尺寸令牌
Smallcheckbox.size.small(16dp)
Mediumcheckbox.size.medium(20dp)
Largecheckbox.size.large(24dp)

点击命中整个行(方框 + 标签):半选态点击变为选中,否则翻转选中态。

令牌对照 ​

令牌用途
checkbox.size.{small,medium,large}三档方框尺寸
checkbox.borderRadius / checkbox.borderWidth方框圆角与描边宽
checkbox.checkWidth勾形 / 横杠描边宽
checkbox.gap方框与标签间距
color.primary.default / color.onPrimary选中底色 / 指示符色
color.border.base未选描边色
color.disabled.{bg,border,text}禁用态三色
color.text.primary标签色
typography.fontSize.base标签字号

黄金用例对照 ​

case id断言本地测试
tap-toggles-and-emits-onchange点击翻转并发射 onChangeLhCheckboxTest.tap_unchecked_emits_true(Compose UI Test)
tap-checked-unchecks选中态点击取消LhCheckboxTest.tap_checked_emits_false
indeterminate-becomes-checked半选点击变选中LhCheckboxTest.tap_indeterminate_emits_true
disabled-blocks-change禁用态不触发LhCheckboxTest.disabled_blocks_change
checked-uses-primary-tokens选中消费主色令牌LhCheckboxDefaultsTest.checked_uses_primary_tokens
unchecked-uses-border-token未选消费描边令牌LhCheckboxDefaultsTest.unchecked_uses_border_token
bash
./gradlew :components:checkbox:test                            # JVM 部分
./gradlew :components:checkbox:connectedAndroidTest           # 交互部分(需设备)