diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/stateStyles_builder.gif b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/stateStyles_builder.gif new file mode 100644 index 0000000000000000000000000000000000000000..e5dbe22007bcc4fa277a63715857dc15fe648d99 Binary files /dev/null and b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/figures/stateStyles_builder.gif differ diff --git a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-polymorphic-style.md b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-polymorphic-style.md index befc55e717aa0723f269fd5f6c1db25e606b1c11..83236d59bb1b78471d93ebd6ff64658f608c39d1 100644 --- a/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-polymorphic-style.md +++ b/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-universal-attributes-polymorphic-style.md @@ -9,6 +9,8 @@ > 从API version 11开始支持另一种写法[attributeModifier](./ts-universal-attributes-attribute-modifier.md),可根据开发者需要动态设置属性。 > > 多态样式仅支持[通用属性](ts-component-general-attributes.md)。如果多态样式不生效,则该属性可能为组件的私有属性,例如:[fontColor](./ts-universal-attributes-text-style.md)、[TextInput](./ts-basic-components-textinput.md)组件的[backgroundColor](./ts-universal-attributes-background.md#backgroundcolor18)等。此时,可以通过attributeModifier动态设置组件属性来解决此问题。 +> +> 当前多态样式的实现依赖于组件自定义节点的刷新机制。由于Builder不具备独立的自定义父节点,无法直接触发刷新,导致多态样式无法在纯Builder环境中生效。可以通过将多态样式封装至自定义组件内部,再将组件放进@Builder中,以此来间接实现多态样式。代码示例可参考[示例三](#示例3设置builder多态样式)。 ## stateStyles @@ -235,4 +237,62 @@ struct Index { } ``` -![selected](figures/selected.gif) \ No newline at end of file +![selected](figures/selected.gif) + +### 示例3(设置Builder多态样式) + +该示例展示了状态为pressed时Builder组件的样式变化。 + +```ts +import { ComponentContent } from '@kit.ArkUI'; +import { BusinessError } from '@kit.BasicServicesKit'; + +@Component +struct Child { + build() { + Row() + .zIndex(10) + .width(100) + .height(200) + .stateStyles({ + normal: { + .backgroundColor(Color.Red) + }, + pressed: { + .backgroundColor(Color.Black) + } + }) + } +} + +@Builder +function +buildText() { + Child() +} + +@Entry +@Component +struct Index { + private contentNode: ComponentContent = + new ComponentContent(this.getUIContext(), wrapBuilder(buildText)); + + build() { + Button().onClick((event: ClickEvent) => { + this.getUIContext() + .getPromptAction() + .openCustomDialog(this.contentNode) + .then(() => { + console.info('OpenCustomDialog complete.') + }) + .catch((error: BusinessError) => { + let message = (error as BusinessError).message; + let code = (error as BusinessError).code; + console.error(`OpenCustomDialog args error code is ${code}, message is ${message}`); + }) + }) + } +} +``` + +![Builder](figures/stateStyles_builder.gif) \ No newline at end of file