HarmonyOS鸿蒙Next中Span的封装问题

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

HarmonyOS鸿蒙Next中Span的封装问题 希望可以封装单独的Span组件,用于在不同的text中解析表情包、解析话题等等。

问题:测试发现,如果是在List中,按下面代码封装Span,Span显示不出来。如果不是List中的话,是正常的。

测试代码

@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State array: Array<String> = new Array()

  aboutToAppear(): void {
    let i = 0
    while (i < 30) {
      this.array.push("测试" + i)
      i++
    }
  }

  build() {
    Column() {
      List() {
        ForEach(this.array, (item: string, index: number) => {
          ListItem() {
            Text() {
              TestSpan({ content: item })
            }.height(50)
          }
        })
      }
    }
    .height('100%')
    .width('100%')
  }

}

@Component
struct TestSpan {
  @Prop
  content: string = ""

  build() {
    Span(this.content)
  }
}

更多关于HarmonyOS鸿蒙Next中Span的封装问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

Span只能作为Text、ContainerSpan的子组件显示,使用自定义组件包裹Span会受渲染时机影响导致显示异常,建议不要单独封装Span

本身Span只支持设置一些文本属性,可以考虑通过attributeModifier进行封装,参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-attribute-modifier-V5

//demo.ets
class MySpanModifier implements AttributeModifier&lt;SpanAttribute&gt; {
  //...
}
@Entry
@Component
struct Index {
  @State message: string = 'Hello World';
  @State array: Array&lt;String&gt; = new Array()
  aboutToAppear(): void {
    console.log('start')
    let i = 0
    while (i &lt; 10) {
      this.array.push("测试" + i)
      i++
    }
  }
  build() {
    Column() {
      List() {
        ForEach(this.array, (item: string, index: number) =&gt; {
          ListItem() {
            Text() {
              ForEach(this.array,(item:string)=>{
                Span(item).attributeModifier(new MySpanModifier())
              })
            }.height(50)
          }
        })
      }
    }
    .height('100%')
    .width('100%')
  }
}

更多关于HarmonyOS鸿蒙Next中Span的封装问题的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,Span的封装主要涉及文本样式和布局的控制。Span用于在文本中应用特定的样式或行为,如字体颜色、大小、点击事件等。鸿蒙Next通过Text组件和Span类来实现这一功能。Span类是一个抽象类,提供了基础的文本样式封装,开发者可以通过继承Span类来自定义文本样式。

鸿蒙Next中的Span封装支持多种内置样式,如ForegroundColorSpan(前景色)、BackgroundColorSpan(背景色)、AbsoluteSizeSpan(绝对大小)等。这些样式可以直接应用于Text组件中的特定文本片段。此外,鸿蒙Next还提供了ClickableSpan,用于处理文本的点击事件,开发者可以通过实现onClick方法来定义点击后的行为。

在鸿蒙Next中,Span的封装通过SpannableStringSpannableStringBuilder来实现。SpannableString用于不可变的文本片段,而SpannableStringBuilder则支持动态修改文本内容和样式。通过setSpan方法,开发者可以将Span应用到指定的文本范围,并控制其样式和行为。

鸿蒙Next的Span封装机制与Android的Span机制类似,但在实现细节上有所差异。鸿蒙Next更加注重性能优化和跨平台兼容性,确保在不同设备上都能高效运行。开发者在使用Span时,应注意样式的继承和覆盖关系,以避免样式冲突。

在HarmonyOS鸿蒙Next中,Span用于对文本进行样式或行为的封装。开发者可以通过Text.TextSpanText.Span类创建自定义的文本片段,支持设置字体、颜色、点击事件等。使用Span时,需注意其与父Text组件的层级关系及样式继承,确保样式一致性。通过组合多个Span,可实现复杂的富文本效果。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!