From b8e5efba7c314c64804fb6a3377fbae332a8176a Mon Sep 17 00:00:00 2001 From: liyi0309 Date: Fri, 4 Jul 2025 18:11:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8C=87=E5=8D=97=E8=A1=A5=E5=85=85=20Signed-o?= =?UTF-8?q?ff-by:=20liyi0309=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...rkts-common-attributes-content-modifier.md | 152 ++++++++++++++++++ .../ui/arkts-forms-overview.md | 12 ++ .../ui/figures/common_builder.gif | Bin 0 -> 29158 bytes 3 files changed, 164 insertions(+) create mode 100644 zh-cn/application-dev/ui/arkts-common-attributes-content-modifier.md create mode 100644 zh-cn/application-dev/ui/arkts-forms-overview.md create mode 100644 zh-cn/application-dev/ui/figures/common_builder.gif diff --git a/zh-cn/application-dev/ui/arkts-common-attributes-content-modifier.md b/zh-cn/application-dev/ui/arkts-common-attributes-content-modifier.md new file mode 100644 index 00000000000..d5c26fbf672 --- /dev/null +++ b/zh-cn/application-dev/ui/arkts-common-attributes-content-modifier.md @@ -0,0 +1,152 @@ +# 内容修改 + +支持通过样式builder自定义特定组件的内容区。 + +> **说明:** +> +> 从API version 12开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 + +## contentModifier + +contentModifier(modifier: ContentModifier\): T + +定制内容区的方法。 + +**系统能力:** SystemCapability.ArkUI.ArkUI.Full + +**参数:** + +| 参数名 | 类型 | 必填 | 说明 | +| -------- | ------------------ | ---- | ------------------------------------------------------------ | +| modifier | ContentModifier\ | 是 | 在当前组件上,定制内容区的方法。
modifier: 内容修改器,开发者需要自定义class实现ContentModifier接口。 | + +**返回值:** + +| 类型 | 说明 | +| --- | --- | +| T | 返回当前组件。 | + +## ContentModifier\ + +开发者需要自定义class实现ContentModifier接口。 + +### applyContent + +applyContent(): WrappedBuilder<[T]> + +定制内容区的Builder。 + +**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 + +**系统能力:** SystemCapability.ArkUI.ArkUI.Full + +**参数**: + +| 参数 | 描述 | +| ---- | ------------------------------------------------------------ | +| T | 组件的属性类,用来区别不同组件自定义内容区后所需要的不同信息,比如Button组件的ButtonConfiguration,Checkbox组件的CheckBoxConfiguration等。 | + +**T参数支持范围:** + +ButtonConfiguration、CheckBoxConfiguration、DataPanelConfiguration、TextClockConfiguration、ToggleConfiguration、GaugeConfiguration、LoadingProgressConfiguration、RadioConfiguration、ProgressConfiguration、RatingConfiguration、SliderConfiguration + +**属性支持范围:** + +支持通用属性enabled,contentModifier。 +## CommonConfiguration\12+对象说明 + +开发者需要自定义class实现ContentModifier接口。 + +**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。 + +**系统能力:** SystemCapability.ArkUI.ArkUI.Full + +| 参数名 | 类型 | 说明 | +| ------ | ------ | ---------------- | +| enabled | boolean | 如果该值为true,则contentModifier可用,并且可以响应triggerChange等操作,如果设置为false,则不会响应triggerChange等操作。 | +| contentModifier | ContentModifier\ | 用于将用户需要的组件信息发送到自定义内容区。 | + + +## 示例 + +通过ContentModifier实现自定义复选框样式的功能,用一个五边形复选框替换原本Checkbox的样式。如果选中,内部会出现红色三角图案,标题会显示选中字样;如果取消选中,红色三角图案消失,标题会显示非选中字样。 + +```ts +// xxx.ets +class MyCheckboxStyle implements ContentModifier { + selectedColor: Color = Color.White; + + constructor(selectedColor: Color) { + this.selectedColor = selectedColor; + } + + applyContent(): WrappedBuilder<[CheckBoxConfiguration]> { + return wrapBuilder(buildCheckbox); + } +} + +@Builder +function buildCheckbox(config: CheckBoxConfiguration) { + Column({ space: 10 }) { + Text(config.name + (config.selected ? "(选中)" : "(非选中)")) + Shape() { + // 五边形复选框样式 + Path() + .width(200) + .height(60) + .commands('M100 0 L0 100 L50 200 L150 200 L200 100 Z') + .fillOpacity(0) + .strokeWidth(3) + // 红色三角图案样式 + Path() + .width(10) + .height(10) + .commands('M50 0 L100 100 L0 100 Z') + .visibility(config.selected ? Visibility.Visible : Visibility.Hidden) + .fill(config.selected ? (config.contentModifier as MyCheckboxStyle).selectedColor : Color.Black) + .stroke((config.contentModifier as MyCheckboxStyle).selectedColor) + .margin({ left: 11, top: 10 }) + } + .width(300) + .height(200) + .viewPort({ + x: 0, + y: 0, + width: 310, + height: 310 + }) + .strokeLineJoin(LineJoinStyle.Miter) + .strokeMiterLimit(5) + .onClick(() => { + // 点击后,触发复选框点击状态变化 + if (config.selected) { + config.triggerChange(false); + } else { + config.triggerChange(true); + } + }) + .margin({ left: 150 }) + } +} + +@Entry +@Component +struct Index { + build() { + Row() { + Column() { + Checkbox({ name: '复选框状态', group: 'checkboxGroup' }) + .select(true) + .contentModifier(new MyCheckboxStyle(Color.Red)) + .onChange((value: boolean) => { + console.info('Checkbox change is' + value); + }) + } + .width('100%') + } + .height('100%') + } +} +``` + +![](figures/common_builder.gif) diff --git a/zh-cn/application-dev/ui/arkts-forms-overview.md b/zh-cn/application-dev/ui/arkts-forms-overview.md new file mode 100644 index 00000000000..89e8cb32697 --- /dev/null +++ b/zh-cn/application-dev/ui/arkts-forms-overview.md @@ -0,0 +1,12 @@ +# 表单与选择组件概述 + +表单与选择组件通常用于构建一个页面的基础元素,如按钮、开关等。 + +开发者可以根据实际应用场景选择合适的表单与选择组件进行页面开发。 + +| 表单与选择组件名称 | 应用场景 | +| -------- | -------- | +| [按钮(Button)](arkts-common-components-button.md) | 通常用于响应用户的点击操作。 | +| [弧形按钮(ArcButton)](arkts-advanced-components-arcbutton.md) | 用于圆形屏幕。为手表用户提供强调、普通、警告等样式按钮。 | +| [单选框(Radio)](arkts-common-components-radio-button.md) | 单选框组件,通常用于提供相应的用户交互选择项。 | +| [切换按钮(Toggle)](arkts-common-components-switch.md) | 一般用于两种状态之间的切换, 如勾选框和开关。 | diff --git a/zh-cn/application-dev/ui/figures/common_builder.gif b/zh-cn/application-dev/ui/figures/common_builder.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f8b8ff4d208c8d93d3c527dc6c9949d26ae3f90 GIT binary patch literal 29158 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