HarmonyOS 鸿蒙Next 自定义属性如何通过 attributeModifier 复用样式

发布于 1周前 作者 eggper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 自定义属性如何通过 attributeModifier 复用样式

自定义属性如何通过 attributeModifier 复用样式

在通过attributeModifier复用自定义组件样式时,新建的自定义Modifier如何实现AttributeModifier<T>,即对于自定义组件T是否只能是common

2 回复
// Index.ets
import { PageOneTmp } from './PageOne'
import { pageTwoTmp } from './PageTwo'
import { pageThreeTmp } from './PageThree'
import { NvDialog } from './navigationDialog'
import { NavigationModifier, UIObserver } from '@kit.ArkUI'

class MyModifier extends NavigationModifier { applyNormalAttribute(instance: NavigationModifier): void { // instance为Button的属性对象,设置正常状态下属性值 instance.backgroundColor(Color.Red) .borderColor(Color.Black) .borderWidth(2) }

applyPressedAttribute(instance: NavigationModifier): void { // instance为Button的属性对象,设置按压状态下属性值 instance.backgroundColor(Color.Green) .borderColor(Color.Orange) .borderWidth(5) } }

@Entry @Component struct NavigationExample {

@Provide(‘pageInfo’) pageInfo: NavPathStack = new NavPathStack() @State modifier: MyModifier = new MyModifier(); aboutToAppear(): void { // this.initObserver() }

initObserver(){ let observer:UIObserver = this.getUIContext().getUIObserver(); observer.on(‘navDestinationUpdate’, { navigationId: “navigationId” }, (info: NavDestinationInfo)=>{ if(info.state === 3){ console.info(“状态3关闭监听”) this.closeMyObserver() } }); // observer.on(‘navDestinationUpdate’, { navigationId: “navigationId” }, this.NavigationStateChange); }

NavigationStateChange(info: NavDestinationInfo){ if(info.state === 3){ console.info(“状态3关闭监听”) this.closeMyObserver() } }

closeMyObserver(){ let observer:UIObserver = this.getUIContext().getUIObserver(); observer.off(‘navDestinationUpdate’, { navigationId: “navigationId” }); }

// 创建路由 @Builder PageMap(name: string) { if (name === ‘pageOne’) { PageOneTmp() } else if (name === ‘pageTwo’) { pageTwoTmp() } else if (name === ‘pageThree’) { pageThreeTmp() } else if (name === ‘dialog’) { NvDialog() } }

build() { Navigation(this.pageInfo) { Column() { Button(‘StartTest’, { stateEffect: true, type: ButtonType.Capsule }) .width(‘80%’) .height(40) .margin(20) .onClick(() => { this.pageInfo.pushPath({ name: ‘pageOne’, param: null, onPop: (popInfo: PopInfo)=>{ console.info(“调用出栈”) } }); // 将name指定的NavDestination页面信息入栈。 })

    Button(<span class="hljs-string">'弹窗'</span>, { stateEffect: <span class="hljs-literal">true</span>, type: ButtonType.Capsule })
      .onClick(()=&gt;{
        <span class="hljs-keyword">this</span>.pageInfo.pushPath({ name: <span class="hljs-string">'dialog'</span>, param: <span class="hljs-literal">null</span>, onPop: (popInfo: PopInfo)=&gt;{
          console.info(<span class="hljs-string">"调用出栈"</span>)
        } }); <span class="hljs-comment">// 将name指定的NavDestination页面信息入栈。</span>
      })
  }
}
.attributeModifier(<span class="hljs-keyword">this</span>.modifier)
.title(<span class="hljs-string">'NavIndex'</span>).navDestination(<span class="hljs-keyword">this</span>.PageMap)
.id(<span class="hljs-string">'navigationId'</span>)

} }

在HarmonyOS鸿蒙Next系统中,自定义属性通过attributeModifier复用样式是一种灵活且强大的方法。你可以通过以下步骤实现这一功能:

  1. 定义自定义属性:首先,在资源文件中定义你的自定义属性,比如颜色、尺寸等。这些属性可以在res/values目录下的XML文件中定义。

  2. 使用attributeModifier:在组件的样式或布局文件中,通过attributeModifier指定你希望修改的属性和值。这里,你可以引用之前定义的自定义属性。

  3. 复用样式:为了复用样式,可以创建一个或多个样式定义,这些样式可以包含多个通过attributeModifier设置的属性。然后,通过style属性将这些样式应用到不同的组件上。

  4. 动态应用:如果需要在运行时动态修改组件的属性,可以通过编程方式使用attributeModifier。这通常涉及到获取组件实例,并调用相应的方法来修改属性。

确保在引用自定义属性和使用attributeModifier时,属性名和值都是正确且已定义的。如果自定义属性或attributeModifier使用不当,可能会导致样式应用失败或运行时错误。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部