• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Checkbox
2
3提供多选框组件,通常用于某选项的打开或关闭。
4
5>  **说明:**
6>
7>  API version 11开始,Checkbox默认样式由圆角方形变为圆形。
8>
9>  该组件从API version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
10
11## 子组件
12
1314
15## 接口
16
17Checkbox(options?: CheckboxOptions)
18
19多选框组件。
20
21**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
22
23**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
24
25**系统能力:** SystemCapability.ArkUI.ArkUI.Full
26
27**参数:**
28
29| 参数名  | 类型                                        | 必填 | 说明               |
30| ------- | ------------------------------------------- | ---- | ------------------ |
31| options | [CheckboxOptions](#checkboxoptions对象说明) | 否   | 配置多选框的参数。 |
32
33## CheckboxOptions对象说明
34
35多选框的信息。
36
37**系统能力:** SystemCapability.ArkUI.ArkUI.Full
38
39| 名称  | 类型 | 必填  | 说明 |
40| --------| --------| ------ | -------- |
41| name    | string | 否 | 用于指定多选框名称。 <br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
42| group   | string | 否 | 用于指定多选框所属群组的名称(即所属CheckboxGroup的名称)。<br/>**说明:** <br/>未配合使用[CheckboxGroup](ts-basic-components-checkboxgroup.md)组件时,此值无用。 <br/>**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。<br/>**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。 |
43| indicatorBuilder<sup>12+</sup> | [CustomBuilder](ts-types.md#custombuilder8) | 否 | 配置多选框的选中样式为自定义组件。自定义组件与Checkbox组件为中心点对齐显示。indicatorBuilder设置为undefined/null时,默认为indicatorBuilder未设置状态。<br/>**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。|
44
45## 属性
46
47除支持[通用属性](ts-component-general-attributes.md)外,还支持以下属性:
48
49### select
50
51select(value: boolean)
52
53设置多选框是否选中。
54
55从API version 10开始,该属性支持[$$](../../../ui/state-management/arkts-two-way-sync.md)双向绑定变量。
56从API version 18开始,该属性支持[!!](../../../ui/state-management/arkts-new-binding.md#系统组件参数双向绑定)双向绑定变量。
57
58**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
59
60**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
61
62**系统能力:** SystemCapability.ArkUI.ArkUI.Full
63
64**参数:**
65
66| 参数名 | 类型    | 必填 | 说明                                                         |
67| ------ | ------- | ---- | ------------------------------------------------------------ |
68| value  | boolean | 是   | 多选框是否选中。<br/>默认值:false<br/>值为true时,多选框被选中。值为false时,多选框不被选中。 |
69
70### select<sup>18+</sup>
71
72select(isSelected: Optional\<boolean>)
73
74设置多选框是否选中。与[select](#select)相比,isSelected参数新增了对undefined类型的支持。
75
76该属性支持[$$](../../../ui/state-management/arkts-two-way-sync.md)双向绑定变量。该属性支持[!!](../../../ui/state-management/arkts-new-binding.md#系统组件参数双向绑定)双向绑定变量。
77
78**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
79
80**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
81
82**系统能力:** SystemCapability.ArkUI.ArkUI.Full
83
84**参数:**
85
86| 参数名     | 类型                                                         | 必填 | 说明                                                         |
87| ---------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
88| isSelected | [Optional](ts-universal-attributes-custom-property.md#optional12)\<boolean> | 是   | 多选框是否选中。<br/>当isSelected的值为undefined时取默认值false。<br/>值为true时,多选框被选中。值为false时,多选框不被选中。 |
89
90### selectedColor
91
92selectedColor(value: ResourceColor)
93
94设置多选框选中状态颜色。
95
96**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
97
98**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
99
100**系统能力:** SystemCapability.ArkUI.ArkUI.Full
101
102**参数:**
103
104| 参数名 | 类型                                       | 必填 | 说明                                                         |
105| ------ | ------------------------------------------ | ---- | ------------------------------------------------------------ |
106| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 多选框选中状态颜色。<br/>默认值:$r('sys.color.ohos_id_color_text_primary_activated')。<br/>异常值按照默认值处理。 |
107
108### selectedColor<sup>18+</sup>
109
110selectedColor(resColor: Optional\<ResourceColor>)
111
112设置多选框选中状态颜色。与[selectedColor](#selectedcolor)相比,resColor参数新增了对undefined类型的支持。
113
114**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
115
116**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
117
118**系统能力:** SystemCapability.ArkUI.ArkUI.Full
119
120**参数:**
121
122| 参数名   | 类型                                                         | 必填 | 说明                                                         |
123| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
124| resColor | [Optional](ts-universal-attributes-custom-property.md#optional12)\<[ResourceColor](ts-types.md#resourcecolor)> | 是   | 多选框选中状态颜色。<br/>当resColor的值为undefined时,默认值:$r('sys.color.ohos_id_color_text_primary_activated')。<br/>异常值按照默认值处理。 |
125
126### unselectedColor<sup>10+</sup>
127
128unselectedColor(value: ResourceColor)
129
130设置多选框非选中状态边框颜色。
131
132**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
133
134**系统能力:** SystemCapability.ArkUI.ArkUI.Full
135
136**参数:**
137
138| 参数名 | 类型                                       | 必填 | 说明                     |
139| ------ | ------------------------------------------ | ---- | -------------------------- |
140| value  | [ResourceColor](ts-types.md#resourcecolor) | 是   | 多选框非选中状态边框颜色。<br/>默认值:$r('sys.color.ohos_id_color_switch_outline_off')。 |
141
142### unselectedColor<sup>18+</sup>
143
144unselectedColor(resColor: Optional\<ResourceColor>)
145
146设置多选框非选中状态边框颜色。与[unselectedColor](#unselectedcolor10)<sup>10+</sup>相比,resColor参数新增了对undefined类型的支持。
147
148**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
149
150**系统能力:** SystemCapability.ArkUI.ArkUI.Full
151
152**参数:**
153
154| 参数名   | 类型                                                         | 必填 | 说明                                                         |
155| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
156| resColor | [Optional](ts-universal-attributes-custom-property.md#optional12)\<[ResourceColor](ts-types.md#resourcecolor)> | 是   | 多选框非选中状态边框颜色。<br/>当resColor的值为undefined时,默认值:$r('sys.color.ohos_id_color_switch_outline_off')。 |
157
158### mark<sup>10+</sup>
159
160mark(value: MarkStyle)
161
162设置多选框内部图标样式。
163
164**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
165
166**系统能力:** SystemCapability.ArkUI.ArkUI.Full
167
168**参数:**
169
170| 参数名 | 类型                                         | 必填 | 说明                                                         |
171| ------ | -------------------------------------------- | ---- | ------------------------------------------------------------ |
172| value  | [MarkStyle](ts-types.md#markstyle10对象说明) | 是   | 多选框内部图标样式。 从API version 12开始,设置了indicatorBuilder时,按照indicatorBuilder中的内容显示。<br/>默认值:{<br/>strokeColor : `$r('sys.color.ohos_id_color_foreground_contrary')`,<br/>strokeWidth: `$r('sys.float.ohos_id_checkbox_stroke_width')`,<br/>size: '20vp'<br/>} |
173
174### mark<sup>18+</sup>
175
176mark(style: Optional\<MarkStyle>)
177
178设置多选框内部图标样式。与[mark](#mark10)<sup>10+</sup>相比,style参数新增了对undefined类型的支持。
179
180**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
181
182**系统能力:** SystemCapability.ArkUI.ArkUI.Full
183
184**参数:**
185
186| 参数名 | 类型                                                         | 必填 | 说明                                                         |
187| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
188| style  | [Optional](ts-universal-attributes-custom-property.md#optional12)\<[MarkStyle](ts-types.md#markstyle10对象说明)> | 是   | 多选框内部图标样式。 设置了indicatorBuilder时,按照indicatorBuilder中的内容显示。<br/>当style的值为undefined时,默认值:{<br/>strokeColor : `$r('sys.color.ohos_id_color_foreground_contrary')`,<br/>strokeWidth: `$r('sys.float.ohos_id_checkbox_stroke_width')`,<br/>size: '20vp'<br/>} |
189
190### shape<sup>11+</sup>
191
192shape(value: CheckBoxShape)
193
194设置CheckBox组件形状, 包括圆形和圆角方形。
195
196**卡片能力:** 从API version 11开始,该接口支持在ArkTS卡片中使用。
197
198**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
199
200**系统能力:** SystemCapability.ArkUI.ArkUI.Full
201
202**参数:**
203
204| 参数名 | 类型                                                  | 必填 | 说明                                                         |
205| ------ | ----------------------------------------------------- | ---- | ------------------------------------------------------------ |
206| value  | [CheckBoxShape](ts-appendix-enums.md#checkboxshape11) | 是   | CheckBox组件形状, 包括圆形和圆角方形。<br/>默认值:CheckBoxShape.CIRCLE |
207
208### shape<sup>18+</sup>
209
210shape(shape: Optional\<CheckBoxShape>)
211
212设置CheckBox组件形状, 包括圆形和圆角方形。与[shape](#shape11)<sup>11+</sup>相比,shape参数新增了对undefined类型的支持。
213
214**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
215
216**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
217
218**系统能力:** SystemCapability.ArkUI.ArkUI.Full
219
220**参数:**
221
222| 参数名 | 类型                                                         | 必填 | 说明                                                         |
223| ------ | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
224| shape  | [Optional](ts-universal-attributes-custom-property.md#optional12)\<[CheckBoxShape](ts-appendix-enums.md#checkboxshape11)> | 是   | CheckBox组件形状, 包括圆形和圆角方形。<br/>当shape的值为undefined时,默认值:CheckBoxShape.CIRCLE |
225
226### contentModifier<sup>12+</sup>
227
228contentModifier(modifier: ContentModifier\<CheckBoxConfiguration>)
229
230定制CheckBox内容区的方法。
231
232**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
233
234**系统能力:** SystemCapability.ArkUI.ArkUI.Full
235
236**参数:**
237
238| 参数名 | 类型                                          | 必填 | 说明                                             |
239| ------ | --------------------------------------------- | ---- | ------------------------------------------------ |
240| modifier  | [ContentModifier\<CheckBoxConfiguration>](#checkboxconfiguration12对象说明) | 是   | 在CheckBox组件上,定制内容区的方法。<br/>modifier:内容修改器,开发者需要自定义class实现ContentModifier接口。 |
241
242### contentModifier<sup>18+</sup>
243
244contentModifier(modifier: Optional<ContentModifier\<CheckBoxConfiguration>>)
245
246定制CheckBox内容区的方法。与[contentModifier](#contentmodifier12)<sup>12+</sup>相比,modifier参数新增了对undefined类型的支持。
247
248**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
249
250**系统能力:** SystemCapability.ArkUI.ArkUI.Full
251
252**参数:**
253
254| 参数名   | 类型                                                         | 必填 | 说明                                                         |
255| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
256| modifier | [Optional](ts-universal-attributes-custom-property.md#optional12)\<[ContentModifier\<CheckBoxConfiguration>](#checkboxconfiguration12对象说明)> | 是   | 在CheckBox组件上,定制内容区的方法。<br/>modifier:内容修改器,开发者需要自定义class实现ContentModifier接口。<br/>当modifier的值为undefined时,不使用内容修改器。 |
257
258## 事件
259
260支持[通用事件](ts-component-general-events.md)外,还支持以下事件:
261
262### onChange
263
264onChange(callback: OnCheckboxChangeCallback)
265
266当选中状态发生变化时,触发该回调。
267
268**卡片能力:** 从API version 9开始,该接口支持在ArkTS卡片中使用。
269
270**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
271
272**系统能力:** SystemCapability.ArkUI.ArkUI.Full
273
274**参数:**
275
276| 参数名   | 类型                                                    | 必填 | 说明             |
277| -------- | ------------------------------------------------------- | ---- | ---------------- |
278| callback | [OnCheckboxChangeCallback](#oncheckboxchangecallback18) | 是   | 返回选中的状态。 |
279
280### onChange<sup>18+</sup>
281
282onChange(callback: Optional\<OnCheckboxChangeCallback>)
283
284当选中状态发生变化时,触发该回调。与[onChange](#onchange)相比,callback参数新增了对undefined类型的支持。
285
286**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
287
288**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
289
290**系统能力:** SystemCapability.ArkUI.ArkUI.Full
291
292**参数:**
293
294| 参数名   | 类型                                                         | 必填 | 说明                                                         |
295| -------- | ------------------------------------------------------------ | ---- | ------------------------------------------------------------ |
296| callback | [Optional](ts-universal-attributes-custom-property.md#optional12)\<[OnCheckboxChangeCallback](#oncheckboxchangecallback18)> | 是   | 返回选中的状态。<br/>当callback的值为undefined时,不使用回调函数。 |
297
298## OnCheckboxChangeCallback<sup>18+</sup>
299
300type OnCheckboxChangeCallback  = (value: boolean) => void
301
302选中的状态。
303
304**卡片能力:** 从API version 18开始,该接口支持在ArkTS卡片中使用。
305
306**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
307
308**系统能力:** SystemCapability.ArkUI.ArkUI.Full
309
310**参数:**
311
312| 参数名 | 类型    | 必填 | 说明                                              |
313| ------ | ------- | ---- | ------------------------------------------------- |
314| value  | boolean | 是   | 返回true时,表示已选中。返回false时,表示未选中。 |
315
316## CheckBoxConfiguration<sup>12+</sup>对象说明
317
318开发者需要自定义class实现ContentModifier接口。
319
320**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
321
322**系统能力:** SystemCapability.ArkUI.ArkUI.Full
323
324| 名称 | 类型    |    只读    |    可选      |  说明              |
325| ------ | ------ | ------ |-------------------------------- |-------------------------------- |
326| name | string | 否 | 否 |当前多选框名称。 |
327| selected | boolean| 否 | 否 | 指示多选框是否被选中。</br>如果select属性没有设置默认值是false。</br>如果设置select属性,此值与设置select属性的值相同。 |
328| triggerChange |Callback\<boolean>| 否 | 否 |触发多选框选中状态变化。<br/>为true时,表示从未选中变为选中。为false时,表示从选中变为未选中。 |
329
330## 示例
331
332### 示例1(设置多选框形状)
333
334该示例通过配置CheckBoxShape实现圆形和圆角方形多选框样式。
335
336```ts
337// xxx.ets
338@Entry
339@Component
340struct CheckboxExample {
341  build() {
342    Flex({ justifyContent: FlexAlign.SpaceEvenly }) {
343      Checkbox({ name: 'checkbox1', group: 'checkboxGroup' })
344        .select(true)
345        .selectedColor(0xed6f21)
346        .shape(CheckBoxShape.CIRCLE)
347        .onChange((value: boolean) => {
348          console.info('Checkbox1 change is' + value);
349        })
350      Checkbox({ name: 'checkbox2', group: 'checkboxGroup' })
351        .select(false)
352        .selectedColor(0x39a2db)
353        .shape(CheckBoxShape.ROUNDED_SQUARE)
354        .onChange((value: boolean) => {
355          console.info('Checkbox2 change is' + value);
356        })
357    }
358  }
359}
360```
361
362
363![](figures/checkbox.gif)
364
365### 示例2(设置多选框颜色)
366
367该示例通过配置mark实现自定义多选框的颜色。
368
369```ts
370// xxx.ets
371@Entry
372@Component
373struct Index {
374
375  build() {
376    Row() {
377      Column() {
378        Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
379          Checkbox({ name: 'checkbox1', group: 'checkboxGroup' })
380            .selectedColor(0x39a2db)
381            .shape(CheckBoxShape.ROUNDED_SQUARE)
382            .onChange((value: boolean) => {
383              console.info('Checkbox1 change is'+ value);
384            })
385            .mark({
386              strokeColor:Color.Black,
387              size: 50,
388              strokeWidth: 5
389            })
390            .unselectedColor(Color.Red)
391            .width(30)
392            .height(30)
393          Text('Checkbox1').fontSize(20)
394        }
395        Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
396          Checkbox({ name: 'checkbox2', group: 'checkboxGroup' })
397            .selectedColor(0x39a2db)
398            .shape(CheckBoxShape.ROUNDED_SQUARE)
399            .onChange((value: boolean) => {
400              console.info('Checkbox2 change is' + value);
401            })
402            .width(30)
403            .height(30)
404          Text('Checkbox2').fontSize(20)
405        }
406      }
407      .width('100%')
408    }
409    .height('100%')
410  }
411}
412```
413
414
415![](figures/checkbox2.gif)
416
417### 示例3(自定义多选框样式)
418该示例实现了自定义复选框样式的功能,自定义样式实现了一个五边形复选框,如果选中,内部会出现红色三角图案,标题会显示选中字样,如果取消选中,红色三角图案消失,标题会显示非选中字样。
419
420```ts
421// xxx.ets
422class MyCheckboxStyle implements ContentModifier<CheckBoxConfiguration> {
423  selectedColor: Color = Color.White;
424
425  constructor(selectedColor: Color) {
426    this.selectedColor = selectedColor;
427  }
428
429  applyContent(): WrappedBuilder<[CheckBoxConfiguration]> {
430    return wrapBuilder(buildCheckbox);
431  }
432}
433
434@Builder
435function buildCheckbox(config: CheckBoxConfiguration) {
436  Column({ space: 10 }) {
437    Text(config.name + (config.selected ? "( 选中 )" : "( 非选中 )")).margin({ right: 70, top: 50 })
438    Text(config.enabled ? "enabled true" : "enabled false").margin({ right: 110 })
439    Shape() {
440      Path()
441        .width(100)
442        .height(100)
443        .commands('M100 0 L0 100 L50 200 L150 200 L200 100 Z')
444        .fillOpacity(0)
445        .strokeWidth(3)
446        .onClick(() => {
447          if (config.selected) {
448            config.triggerChange(false);
449          } else {
450            config.triggerChange(true);
451          }
452        })
453        .opacity(config.enabled ? 1 : 0.1)
454      Path()
455        .width(10)
456        .height(10)
457        .commands('M50 0 L100 100 L0 100 Z')
458        .visibility(config.selected ? Visibility.Visible : Visibility.Hidden)
459        .fill(config.selected ? (config.contentModifier as MyCheckboxStyle).selectedColor : Color.Black)
460        .stroke((config.contentModifier as MyCheckboxStyle).selectedColor)
461        .margin({ left: 10, top: 10 })
462        .opacity(config.enabled ? 1 : 0.1)
463    }
464    .width(300)
465    .height(200)
466    .viewPort({
467      x: 0,
468      y: 0,
469      width: 310,
470      height: 310
471    })
472    .strokeLineJoin(LineJoinStyle.Miter)
473    .strokeMiterLimit(5)
474    .margin({ left: 50 })
475  }
476}
477
478@Entry
479@Component
480struct Index {
481  @State checkboxEnabled: boolean = true;
482
483  build() {
484    Column({ space: 100 }) {
485      Checkbox({ name: '复选框状态', group: 'checkboxGroup' })
486        .contentModifier(new MyCheckboxStyle(Color.Red))
487        .onChange((value: boolean) => {
488          console.info('Checkbox change is' + value);
489        }).enabled(this.checkboxEnabled)
490
491      Row() {
492        Toggle({ type: ToggleType.Switch, isOn: true }).onChange((value: boolean) => {
493          if (value) {
494            this.checkboxEnabled = true;
495          } else {
496            this.checkboxEnabled = false;
497          }
498        })
499      }.position({ x: 50, y: 130 })
500    }.margin({ top: 30 })
501  }
502}
503```
504
505
506![](figures/checkbox3.gif)
507
508### 示例4(设置文本多选框样式)
509该示例通过配置indicatorBuilder实现选中样式为Text。
510```ts
511// xxx.ets
512@Entry
513@Component
514struct CheckboxExample {
515  @Builder
516  indicatorBuilder(value: number) {
517    Column(){
518      Text(value > 99 ? '99+': value.toString())
519        .textAlign(TextAlign.Center)
520        .fontSize(value > 99 ?  '16vp': '20vp')
521        .fontWeight(FontWeight.Medium)
522        .fontColor('#ffffffff')
523    }
524  }
525  build() {
526    Row() {
527      Column() {
528        Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center}) {
529          Checkbox({ name: 'checkbox1', group: 'checkboxGroup', indicatorBuilder:()=>{this.indicatorBuilder(9)}})
530            .shape(CheckBoxShape.CIRCLE)
531            .onChange((value: boolean) => {
532              console.info('Checkbox1 change is'+ value);
533            })
534            .mark({
535              strokeColor:Color.Black,
536              size: 50,
537              strokeWidth: 5
538            })
539            .width(30)
540            .height(30)
541          Text('Checkbox1').fontSize(20)
542        }.padding(15)
543        Flex({ justifyContent: FlexAlign.Center, alignItems: ItemAlign.Center }) {
544          Checkbox({ name: 'checkbox2', group: 'checkboxGroup', indicatorBuilder:()=>{this.indicatorBuilder(100)}})
545            .shape(CheckBoxShape.ROUNDED_SQUARE)
546            .onChange((value: boolean) => {
547              console.info('Checkbox2 change is' + value);
548            })
549            .width(30)
550            .height(30)
551          Text('Checkbox2').fontSize(20)
552        }
553      }
554      .width('100%')
555    }
556    .height('100%')
557  }
558}
559```
560
561
562![](figures/checkbox4.gif)