HarmonyOS 鸿蒙Next 自定义属性如何通过 attributeModifier 复用样式
HarmonyOS 鸿蒙Next 自定义属性如何通过 attributeModifier 复用样式
在通过attributeModifier复用自定义组件样式时,新建的自定义Modifier如何实现AttributeModifier<T>,即对于自定义组件T是否只能是common
// 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(()=>{
<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)=>{
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
复用样式是一种灵活且强大的方法。你可以通过以下步骤实现这一功能:
-
定义自定义属性:首先,在资源文件中定义你的自定义属性,比如颜色、尺寸等。这些属性可以在
res/values
目录下的XML文件中定义。 -
使用
attributeModifier
:在组件的样式或布局文件中,通过attributeModifier
指定你希望修改的属性和值。这里,你可以引用之前定义的自定义属性。 -
复用样式:为了复用样式,可以创建一个或多个样式定义,这些样式可以包含多个通过
attributeModifier
设置的属性。然后,通过style
属性将这些样式应用到不同的组件上。 -
动态应用:如果需要在运行时动态修改组件的属性,可以通过编程方式使用
attributeModifier
。这通常涉及到获取组件实例,并调用相应的方法来修改属性。
确保在引用自定义属性和使用attributeModifier
时,属性名和值都是正确且已定义的。如果自定义属性或attributeModifier
使用不当,可能会导致样式应用失败或运行时错误。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html