HarmonyOS鸿蒙Next中typeNode能不能用AttributeModifier?

HarmonyOS鸿蒙Next中typeNode能不能用AttributeModifier? 试了一下,没生效

import { FrameNode, NodeController, typeNode } from '@kit.ArkUI'

@Entry
@Component
struct FrameNode03 {
  private myNodeController: MyNodeController = new MyNodeController()

  build() {
    Row() {
      NodeContainer(this.myNodeController)
    }
  }
}


// 继承NodeController实现自定义UI控制器
class MyNodeController extends NodeController {
  makeNode(uiContext: UIContext): FrameNode | null {
    //步骤总结:创建相应类型的节点,设置属性。
    let frameNode = new FrameNode(uiContext) // 创建框架节点
    frameNode.commonAttribute.width(100)
    // .height(50)
    // .borderColor(Color.Gray)
    // .borderWidth(1)
    // .margin({ left: 10 })
    // .backgroundColor('#ffe3f3e9')
    let col = typeNode.createNode(uiContext, 'Column') // 创建类型节点:列容器
    col.initialize({ space: 5 }).width(120) //列容器的属性设置
    // .backgroundColor('#ffe3e4f3')
      .attributeModifier(new LayoutMod())

    frameNode.appendChild(col) // 把列放入框架

    let text = typeNode.createNode(uiContext, 'Text') // 创建类型节点:文本
    text.initialize("Hello").fontColor(Color.Blue).fontSize(14) //设置文本属性
      .backgroundColor('#fff2f3e3')

    col.appendChild(text) //文本节点放入列容器

    let text2 = typeNode.createNode(uiContext, 'Text') // 创建类型节点:文本
    text2.initialize("Hello").fontColor(Color.Blue).fontSize(14) //设置文本属性
      .backgroundColor('#fff2f3e3')
    col.appendChild(text2) //文本节点放入列容器
    return frameNode
  }
}

class LayoutMod implements AttributeModifier<ColumnAttribute> {
  // layout?: Layout
  // backgroundColor?: string
  // borderRadius?: number
  // margin?: Padding

  constructor() {

  }

  applyNormalAttribute(instance: ColumnAttribute): void {
    instance.backgroundColor('#ff69e94e')
  }
}

更多关于HarmonyOS鸿蒙Next中typeNode能不能用AttributeModifier?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

5 回复

CommonAttribute获取FrameNode中持有的CommonAttribute接口,FrameNode的属性支持范围参考CommonModifier,其中AttributeModifier不支持嵌套使用,不生效,即typeNode不支持AttributeModifier。

更多关于HarmonyOS鸿蒙Next中typeNode能不能用AttributeModifier?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


考虑未来支持吗?AttributeModifier挺方便的,

暂时无支持计划,

在HarmonyOS Next中,typeNode可以使用AttributeModifier。AttributeModifier是ArkUI中用于动态修改组件属性的机制,适用于typeNode的属性调整。它通过属性方法直接操作组件样式,无需依赖Java或C语言实现。具体使用时,需在typeNode声明中绑定对应的AttributeModifier实例,以在运行时更新属性状态。该功能基于ArkTS/TypeScript的声明式语法实现。

在HarmonyOS Next中,typeNode创建的节点确实支持使用AttributeModifier。从你的代码来看,问题可能出现在几个方面:

  1. AttributeModifier实现不完整 - 你的LayoutMod类只实现了applyNormalAttribute方法,但可能还需要实现其他必要的方法

  2. 属性优先级问题 - 在调用attributeModifier之前,你已经通过initialize设置了space属性,这可能会影响AttributeModifier的生效

  3. AttributeModifier接口实现 - 确保ColumnAttribute接口的所有必需方法都已正确实现

建议检查以下几点:

  • 确认LayoutMod类完整实现了AttributeModifier<ColumnAttribute>接口的所有方法
  • 尝试将attributeModifier调用移到其他属性设置之前
  • 检查ColumnAttribute支持的具体属性列表,确保backgroundColor等属性确实可用

AttributeModifier机制本身是支持的,但需要确保接口实现和调用顺序正确。

回到顶部