动态设置组件的属性，支持开发者在属性设置时使用if/else语法，且根据需要使用多态样式设置属性。

说明

* 从API version 11开始支持。后续版本如有新增内容，则采用上角标单独标记该内容的起始版本。
* 在attributeModifier中设置的属性尽量不要与其他方法设置的属性相同，避免在页面刷新时attributeModifier不生效。
* 对于仅需根据条件设置组件单一属性的简单场景，可以使用[三目表达式](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-declarative-ui-description#配置属性)（如.width(isFullScreen ? 200 : 100)）。
* 从API version 20开始，attributeModifier支持自定义组件。

## attributeModifier

PhonePC/2in1TabletTVWearable

attributeModifier(modifier: AttributeModifier<T>): T

动态设置组件的属性方法。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.ArkUI.ArkUI.Full

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| modifier | [AttributeModifier<T>](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#attributemodifiert) | 是 | 在当前组件上，动态设置属性方法，支持使用if/else语法。  modifier：属性修改器，开发者需要自定义class实现AttributeModifier接口。 |

**返回值：**

展开

| 类型 | 说明 |
| --- | --- |
| T | 返回当前组件。 |

## AttributeModifier<T>

PhonePC/2in1TabletTVWearable

开发者需要自定义class实现AttributeModifier接口。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.ArkUI.ArkUI.Full

说明

在以下回调函数中，当对instance对象的同一个属性重复设置相同的值或对象时，不会触发该属性的更新。

### applyNormalAttribute

PhonePC/2in1TabletTVWearable

applyNormalAttribute?(instance: T): void

组件普通状态时的样式。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.ArkUI.ArkUI.Full

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| instance | T | 是 | 组件的属性类，用来标识进行属性设置的组件的类型，比如[Button](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button)组件的[ButtonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button#属性)，[Text](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text)组件的[TextAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text#属性)等。 |

### applyPressedAttribute

PhonePC/2in1TabletTVWearable

applyPressedAttribute?(instance: T): void

组件按压状态的样式。参考[示例2（组件绑定Modifier实现按压态效果）](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#示例2组件绑定modifier实现按压态效果)、[示例8（自定义组件绑定Modifier实现按压态效果）](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#示例8自定义组件绑定modifier实现按压态效果)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.ArkUI.ArkUI.Full

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| instance | T | 是 | 组件的属性类，用来标识进行属性设置的组件的类型，比如[Button](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button)组件的[ButtonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button#属性)，[Text](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text)组件的[TextAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text#属性)等。 |

### applyFocusedAttribute

PhonePC/2in1TabletTVWearable

applyFocusedAttribute?(instance: T): void

组件获焦状态的样式。参考[示例5（组件绑定Modifier获焦样式）](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#示例5组件绑定modifier获焦样式)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.ArkUI.ArkUI.Full

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| instance | T | 是 | 组件的属性类，用来标识进行属性设置的组件的类型，比如[Button](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button)组件的[ButtonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button#属性)，[Text](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text)组件的[TextAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text#属性)等。 |

### applyDisabledAttribute

PhonePC/2in1TabletTVWearable

applyDisabledAttribute?(instance: T): void

组件禁用状态的样式。参考[示例6（组件绑定modifier禁用状态的样式）](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#示例6组件绑定modifier禁用状态的样式)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.ArkUI.ArkUI.Full

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| instance | T | 是 | 组件的属性类，用来标识进行属性设置的组件的类型，比如[Button](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button)组件的[ButtonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button#属性)，[Text](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text)组件的[TextAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text#属性)等。 |

### applySelectedAttribute

PhonePC/2in1TabletTVWearable

applySelectedAttribute?(instance: T): void

组件选中状态的样式。

开发者可根据需要自定义实现这些方法，通过传入的参数识别组件类型，对instance设置属性，支持使用if/else语法进行动态设置。参考[示例7（组件绑定modifier选中状态样式）](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#示例7组件绑定modifier选中状态样式)。

**元服务API：** 从API version 12开始，该接口支持在元服务中使用。

**系统能力：** SystemCapability.ArkUI.ArkUI.Full

**参数：**

展开

| 参数名 | 类型 | 必填 | 说明 |
| --- | --- | --- | --- |
| instance | T | 是 | 组件的属性类，用来标识进行属性设置的组件的类型，比如[Button](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button)组件的[ButtonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button#属性)，[Text](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text)组件的[TextAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text#属性)等。 |

**instance参数支持范围：**

[AlphabetIndexerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-alphabet-indexer#属性)、[BadgeAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-badge#属性)、[BlankAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-blank#属性)、[ButtonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-button#属性)、[CalendarPickerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-calendarpicker#属性)、[CanvasAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-components-canvas-canvas#属性)、[CheckboxAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-checkbox#属性)、[CheckboxGroupAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-checkboxgroup#属性)、[CircleAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-circle#属性)、[ColumnAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-column#属性)、[ColumnSplitAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-columnsplit#属性)、[CommonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-component-general-attributes)、[CounterAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-counter#属性)、[DataPanelAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-datapanel#属性)、[DatePickerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-datepicker#属性)、[DividerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-divider#属性)、[EllipseAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-ellipse#属性)、[FlexAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-flex#属性)、[FlowItemAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-flowitem#属性)、[FormLinkAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-formlink#属性)、[GaugeAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-gauge#属性)、[GridAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-grid#属性)、[GridColAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-gridcol#属性)、[GridItemAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-griditem#属性)、[GridRowAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-gridrow#属性)、[HyperlinkAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-hyperlink#属性)、[IndicatorComponentAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-swiper-components-indicator#属性)、[ImageAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-image#属性)、[ImageAnimatorAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-imageanimator#属性)、[ImageSpanAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-imagespan#属性)、[ContainerSpanAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-containerspan#属性)、[LineAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-line#属性)、[ListAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-list#属性)、[ListItemAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-listitem#属性)、[ListItemGroupAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-listitemgroup#属性)、[LoadingProgressAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-loadingprogress#属性)、[MarqueeAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-marquee#属性)、[MenuAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-menu#属性)、[MenuItemAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-menuitem#属性)、[MenuItemGroupAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-menuitemgroup)、[NavDestinationAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navdestination#属性)、[NavigationAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navigation#属性)、[NavigatorAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-navigator#属性)、[NavRouterAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-navrouter#属性)、[PanelAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-panel#属性)、[PathAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-path#属性)、[PatternLockAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-patternlock#属性)、[PolygonAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-polygon#属性)、[PolylineAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-polyline#属性)、[ProgressAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-progress#属性)、[QRCodeAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-qrcode#属性)、[RadioAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-radio#属性)、[RatingAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-rating#属性)、[RectAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-rect#属性)、[RefreshAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-refresh#属性)、[RelativeContainerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-relativecontainer#属性)、[RichEditorAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-richeditor#属性)、[RichTextAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-richtext#属性)、[RowAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-row#属性)、[RowSplitAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-rowsplit#属性)、[ScrollAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-scroll#属性)、[ScrollBarAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-scrollbar#属性)、[SearchAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-search#属性)、[SelectAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-select#属性)、[ShapeAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-drawing-components-shape#属性)、[SideBarContainerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-sidebarcontainer#属性)、[SliderAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-slider#属性)、[SpanAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-span#属性)、[SymbolSpanAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-symbolspan#属性)、[StackAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-stack#属性)、[StepperAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-stepper#属性)、[StepperItemAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-stepperitem#属性)、[SwiperAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-swiper#属性)、[SymbolGlyphAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-symbolglyph#属性)、[TabContentAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-tabcontent#属性)、[TabsAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-tabs#属性)、[TextAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-text#属性)、[TextAreaAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textarea#属性)、[TextClockAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textclock#属性)、[TextInputAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textinput#属性)、[TextPickerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-textpicker#属性)、[TextTimerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-texttimer#属性)、[TimePickerAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-timepicker#属性)、[ToggleAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-toggle#属性)、[VideoAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-media-components-video#属性)、[WaterFlowAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-waterflow#属性)、[XComponentAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-basic-components-xcomponent#属性)、[ParticleAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-particle-animation#属性)、[UIPickerComponentAttribute](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-container-ui-picker-component#属性)22+。

说明

* StepperAttribute从API version 22开始废弃，建议使用SwiperAttribute替代。
* StepperItemAttribute从API version 22开始废弃，建议使用SwiperAttribute替代。
* NavigatorAttribute从API version 20开始废弃，建议使用NavigationAttribute替代。
* NavRouterAttribute从API version 20开始废弃，建议使用NavigationAttribute替代。
* PanelAttribute从API version 20开始废弃，推荐使用通用属性bindSheet。

**属性支持范围：**

1. 不支持入参或者返回值为[CustomBuilder](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-types#custombuilder8)的属性。
2. 不支持入参为[modifier](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-user-defined-modifier)类型的属性，具体为以下属性方法：[attributeModifier](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#attributemodifier)，[drawModifier](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-draw-modifier)和[gestureModifier](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-gesture-modifier)。
3. 不支持[animation](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-animatorproperty)属性。
4. 不支持[gesture](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-gesture-events-binding)类型的属性。
5. 不支持[stateStyles](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-polymorphic-style)属性。
6. 不支持已废弃属性。

不支持或者未实现的属性在使用时会抛出"Method not implemented."、"is not callable"、"Builder is not supported."等异常信息。具体Modifier支持范围可参考[属性或事件对attributemodifier的支持情况](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-user-defined-extension-attributemodifier#属性或事件对attributemodifier的支持情况)。

## 自定义Modifier

PhonePC/2in1TabletTVWearable

从API version 12开始，开发者可使用自定义Modifier构建组件并配置属性，通过此自定义的Modifier可调用所封装组件的属性和样式接口。

**自定义Modifier支持范围：**

CommonModifier、ColumnModifier、ColumnSplitModifier、RowModifier、RowSplitModifier、SideBarContainerModifier、BlankModifier、DividerModifier、GridColModifier、GridRowModifier、NavDestinationModifier、NavigatorModifier、StackModifier、NavigationModifier、NavRouterModifier、StepperItemModifier、StepperModifier20+、TabsModifier、GridModifier、GridItemModifier、ListModifier、ListItemModifier、ListItemGroupModifier、ScrollModifier、SwiperModifier、WaterFlowModifier、ButtonModifier、CounterModifier、TextPickerModifier、TimePickerModifier、ToggleModifier、CalendarPickerModifier、CheckboxModifier、CheckboxGroupModifier、DatePickerModifier、RadioModifier、RatingModifier、SelectModifier、SliderModifier、PatternLockModifier、SpanModifier、SymbolSpanModifier、ContainerSpanModifier、RichEditorModifier、RefreshModifier、SearchModifier、TextAreaModifier、TextModifier、TextInputModifier、ImageSpanModifier、ImageAnimatorModifier、ImageModifier、VideoModifier、DataPanelModifier、GaugeModifier、LoadingProgressModifier、MarqueeModifier、ProgressModifier、QRCodeModifier、TextClockModifier、TextTimerModifier、LineModifier、PathModifier、PolygonModifier、PolylineModifier、RectModifier、ShapeModifier、AlphabetIndexerModifier、FormComponentModifier、HyperlinkModifier、MenuModifier、MenuItemModifier、PanelModifier、SymbolGlyphModifier、ParticleModifier、UIPickerComponentModifier22+。

未暴露的组件Modifier可以使用CommonModifier。

说明

* StepperModifier从API version 22开始废弃，建议使用SwiperModifier替代。
* StepperItemModifier从API version 22开始废弃，建议使用SwiperModifier替代。
* NavigatorModifier从API version 20开始废弃，建议使用NavigationModifier替代。
* NavRouterModifier从API version 20开始废弃，建议使用NavigationModifier替代。
* PanelModifier从API version 20开始废弃，推荐使用通用属性bindSheet。

**注意事项**

1. 设置自定义Modifier给一个组件，该组件对应属性生效。
2. 自定义Modifier属性值变化，组件对应属性也会变化。自定义Modifier类型为基类，构造的对象为子类对象，使用时要通过as进行类型断言为子类。
3. 一个自定义Modifier设置给两个组件，Modifier属性变化的时候对两个组件同时生效。
4. 一个Modifier设置了属性A和属性B，再设置属性C和属性D，4个属性同时在组件上生效。
5. 自定义Modifier不支持@State标注的状态数据的变化感知，见[示例3（自定义Modifier不支持感知@State装饰的状态数据变化）](/consumer/cn/doc/harmonyos-references/ts-universal-attributes-attribute-modifier#示例3自定义modifier不支持感知state装饰的状态数据变化)。
6. 多次通过attributeModifier设置属性时，生效的属性为所有属性的并集，相同属性按照设置顺序生效。

## 示例

PhonePC/2in1TabletTVWearable

### 示例1（组件绑定Modifier切换背景颜色）

该示例通过Button绑定Modifier实现了点击切换背景颜色的效果。



```
1. // xxx.ets
2. // 设置Button组件属性的自定义AttributeModifier
3. class MyButtonModifier implements AttributeModifier<ButtonAttribute> {
4. public isDark: boolean = false;

6. applyNormalAttribute(instance: ButtonAttribute): void {
7. if (this.isDark) {
8. instance.backgroundColor(Color.Black);
9. } else {
10. instance.backgroundColor(Color.Red);
11. }
12. }
13. }

15. @Entry
16. @Component
17. struct attributeDemo {
18. @State modifier: MyButtonModifier = new MyButtonModifier();

20. build() {
21. Row() {
22. Column() {
23. Button("Button")
24. .attributeModifier(this.modifier)
25. .onClick(() => {
26. this.modifier.isDark = !this.modifier.isDark;
27. })
28. }
29. .width('100%')
30. }
31. .height('100%')
32. }
33. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/10/v3/f3qFB33oSbGwR1WfObyfmA/zh-cn_image_0000002568759220.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=AD7EF19DBC16D98F85E1CB57E1FD74882BC2DC01437F64FE82A2CE77B4F56CA6)

### 示例2（组件绑定Modifier实现按压态效果）

该示例通过Button绑定Modifier实现了按压态的效果。如果配合状态管理V2使用，详情见：[Modifier与makeObserved](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-v1-v2-migration-inner-object#modifier)。



```
1. // xxx.ets
2. // 设置Button组件属性的自定义AttributeModifier
3. class MyButtonModifier implements AttributeModifier<ButtonAttribute> {
4. applyNormalAttribute(instance: ButtonAttribute): void {
5. instance.backgroundColor(Color.Black);
6. }

8. applyPressedAttribute(instance: ButtonAttribute): void {
9. instance.backgroundColor(Color.Red);
10. }
11. }

13. @Entry
14. @Component
15. struct attributePressedDemo {
16. @State modifier: MyButtonModifier = new MyButtonModifier();

18. build() {
19. Row() {
20. Column() {
21. Button("Button")
22. .attributeModifier(this.modifier)
23. }
24. .width('100%')
25. }
26. .height('100%')
27. }
28. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/48/v3/Uj2eZhlDTBu0RyYCZ1zA5w/zh-cn_image_0000002568759220.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=016D37F54699B71C6E32EF4BD365BBE46708B800BA8F491EEC864803400F2650)

### 示例3（自定义Modifier不支持感知@State装饰的状态数据变化）

该示例通过状态数据设置自定义Modifier的宽度，自定义Modifier不支持感知@State装饰的状态数据变化，点击按钮后宽度不发生改变。



```
1. import { CommonModifier } from "@kit.ArkUI";

3. const TEST_TAG: string = "AttributeModifier";

5. // 设置通用组件属性的自定义AttributeModifier
6. class MyModifier extends CommonModifier {
7. applyNormalAttribute(instance: CommonAttribute): void {
8. super.applyNormalAttribute?.(instance);
9. }
10. }

12. @Component
13. struct MyImage1 {
14. @Link modifier: CommonModifier;

16. build() {
17. Image($r("app.media.startIcon")).attributeModifier(this.modifier as MyModifier)
18. }
19. }

21. @Entry
22. @Component
23. struct Index {
24. index: number = 0;
25. @State width1: number = 100;
26. @State height1: number = 100;
27. @State myModifier: CommonModifier = new MyModifier().width(this.width1).height(this.height1).margin(10);

29. build() {
30. Column() {
31. Button($r("app.string.EntryAbility_label"))
32. .margin(10)
33. .onClick(() => {
34. console.info(TEST_TAG, "onClick");
35. this.index++;
36. if (this.index % 2 === 1) {
37. this.width1 = 10;
38. console.info(TEST_TAG, "setGroup1");
39. } else {
40. this.height1 = 10;
41. console.info(TEST_TAG, "setGroup2");
42. }
43. })
44. MyImage1({ modifier: this.myModifier })
45. }
46. .width('100%')
47. }
48. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/fb/v3/TA06xnEDR_6Lyc7O4nIkug/zh-cn_image_0000002599358463.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=6DA24DCDC46509749BF93FEE6A628D01B548126235B3ED428E84FDA7E135C946)

### 示例4（Modifier和自定义Modifier的属性同时生效）

该示例通过自定义Modifier设置了width和height，点击按钮时设置[borderStyle](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-appendix-enums#borderstyle)和[borderWidth](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ts-universal-attributes-border#borderwidth)，点击后4个属性同时生效。



```
1. import { CommonModifier } from "@kit.ArkUI";

3. const TEST_TAG: string = "AttributeModifier";

5. // 设置通用组件属性的自定义AttributeModifier
6. class MyModifier extends CommonModifier {
7. applyNormalAttribute(instance: CommonAttribute): void {
8. super.applyNormalAttribute?.(instance);
9. }

11. public setGroup1(): void {
12. this.borderStyle(BorderStyle.Dotted);
13. this.borderWidth(8);
14. }

16. public setGroup2(): void {
17. this.borderStyle(BorderStyle.Dashed);
18. this.borderWidth(8);
19. }
20. }

22. @Component
23. struct MyImage1 {
24. @Link modifier: CommonModifier;

26. build() {
27. Image($r("app.media.startIcon")).attributeModifier(this.modifier as MyModifier)
28. }
29. }

31. @Entry
32. @Component
33. struct Index {
34. @State myModifier: CommonModifier = new MyModifier().width(100).height(100).margin(10);
35. index: number = 0;

37. build() {
38. Column() {
39. Button($r("app.string.EntryAbility_label"))
40. .margin(10)
41. .onClick(() => {
42. console.info(TEST_TAG, "onClick");
43. this.index++;
44. if (this.index % 2 === 1) {
45. (this.myModifier as MyModifier).setGroup1();
46. console.info(TEST_TAG, "setGroup1");
47. } else {
48. (this.myModifier as MyModifier).setGroup2();
49. console.info(TEST_TAG, "setGroup2");
50. }
51. })
52. MyImage1({ modifier: this.myModifier })
53. }
54. .width('100%')
55. }
56. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/ae/v3/R71nb44OTn6qyYa4hjBZ4Q/zh-cn_image_0000002568918868.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=CBB246643AFEF4140404DE8275913941E36B37EDEFCC93A26952FFCED62DE2E5)

### 示例5（组件绑定Modifier获焦样式）

该示例通过Button绑定Modifier实现了组件在获得焦点时的样式效果。点击Button2后，Button会显示获得焦点后的样式。



```
1. // 设置Button组件属性的自定义AttributeModifier
2. class MyButtonModifier implements AttributeModifier<ButtonAttribute> {

4. applyNormalAttribute(instance: ButtonAttribute): void {
5. instance.backgroundColor(Color.Blue);
6. }
7. applyFocusedAttribute(instance: ButtonAttribute): void {
8. instance.backgroundColor(Color.Green);
9. }
10. }

12. @Entry
13. @Component
14. struct attributeDemo {
15. @State modifier: MyButtonModifier = new MyButtonModifier();
16. @State isDisable: boolean = true;

18. build() {
19. Row() {
20. Column() {
21. Button("Button")
22. .attributeModifier(this.modifier)
23. .enabled(this.isDisable)
24. .id("app")
25. Divider().vertical(false).strokeWidth(15).color(Color.Transparent)
26. Button("Button2")
27. .onClick(() => {
28. this.getUIContext().getFocusController().activate(true);
29. this.getUIContext().getFocusController().requestFocus("app");
30. })
31. }
32. .width('100%')
33. }
34. .height('100%')
35. }
36. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/3c/v3/iUILRyMOROiy6TmJl8x4-A/zh-cn_image_0000002599478413.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=AD55BDBD748598FFDDC030CA7423C29FC8DA5525496FE348EA2EBC0521957CAA)

### 示例6（组件绑定Modifier禁用状态的样式）

该示例通过Button绑定Modifier实现了组件禁用时的样式效果。点击Button2后，Button会显示禁用状态的样式。



```
1. // 设置Button组件属性的自定义AttributeModifier
2. class MyButtonModifier implements AttributeModifier<ButtonAttribute> {
3. applyDisabledAttribute(instance: ButtonAttribute): void {
4. instance.width(200);
5. }
6. }

8. @Entry
9. @Component
10. struct attributeDemo {
11. @State modifier: MyButtonModifier = new MyButtonModifier();
12. @State isDisable: boolean = true;

14. build() {
15. Row() {
16. Column() {
17. Button("Button")
18. .attributeModifier(this.modifier)
19. .enabled(this.isDisable)
20. Divider().vertical(false).strokeWidth(15).color(Color.Transparent)
21. Button("Button2")
22. .onClick(() => {
23. this.isDisable = !this.isDisable;
24. })
25. }
26. .width('100%')
27. }
28. .height('100%')
29. }
30. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/1d/v3/Q-tzFxfTR-2Fp-kqVPdkow/zh-cn_image_0000002568759222.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=72B8E08D97C9D80D8DFF5F29D15CB5049A4E4C82BD15D151612D77AAB0D2B9E7)

### 示例7（组件绑定Modifier选中状态样式）

该示例通过Radio绑定Modifier实现了展示组件选中时样式的效果。



```
1. // 设置Radio组件属性的自定义AttributeModifier
2. class MyRadioModifier implements AttributeModifier<RadioAttribute> {
3. applyNormalAttribute(instance: RadioAttribute): void {
4. instance.backgroundColor(Color.Blue);
5. }

7. applySelectedAttribute(instance: RadioAttribute): void {
8. instance.backgroundColor(Color.Red);
9. instance.borderWidth(2);
10. }
11. }

13. @Entry
14. @Component
15. struct attributeDemo {
16. @State modifier: MyRadioModifier = new MyRadioModifier();
17. @State value: boolean = false;
18. @State value2: boolean = false;

20. build() {
21. Row() {
22. Column() {
23. Radio({ value: 'Radio1', group: 'radioGroup1' })
24. .checked(this.value)
25. .height(50)
26. .width(50)
27. .borderWidth(0)
28. .borderRadius(30)
29. .onClick(() => {
30. this.value = !this.value;
31. })
32. .attributeModifier(this.modifier)
33. }
34. .width('100%')
35. }
36. .height('100%')
37. }
38. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/2d/v3/nU13H333S6muvWIo93MJwg/zh-cn_image_0000002599358465.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=9D41EBF1521A781D1EBC3B19B92B624BEB33C1B219E45A3DE3F10C548800CC9B)

### 示例8（自定义组件绑定Modifier实现按压态效果）

该示例通过Common（自定义）绑定Modifier实现了按压态的效果。



```
1. // xxx.ets
2. // 设置自定义组件属性的自定义AttributeModifier
3. class CustomModifier implements AttributeModifier<CommonAttribute> {
4. applyNormalAttribute(instance: CommonAttribute): void {
5. instance.backgroundColor(Color.Blue)
6. }

8. applyPressedAttribute(instance: CommonAttribute): void {
9. instance.backgroundColor(Color.Gray)
10. }
11. }

13. @Entry
14. @Component
15. struct attributePressedDemo {
16. @State modifier: CustomModifier = new CustomModifier()

18. build() {
19. Row() {
20. Column() {
21. ChildComponent()
22. .attributeModifier(this.modifier)
23. }
24. .width('100%')
25. }
26. .height('100%')
27. }
28. }

30. // 自定义组件
31. @Component
32. struct ChildComponent {
33. build() {
34. Text("common")
35. .fontColor(Color.White)
36. .fontSize(28)
37. .textAlign(TextAlign.Center)
38. .width('35%')
39. .height('10%')
40. }
41. }
```

![](https://contentcenter-vali-drcn.dbankcdn.cn/pvt_2/DeveloperAlliance_scene_100_1/e9/v3/hC4uI4i7SjucFQeopNHWdQ/zh-cn_image_0000002568918870.gif?HW-CC-KV=V1&HW-CC-Date=20260511T034439Z&HW-CC-Expire=86400&HW-CC-Sign=94F5B937579525B05D05D413653DE521335797BE3E086CCF2040EF6D0AFC18F6)