HarmonyOS 鸿蒙Next 自定义Span

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

HarmonyOS 鸿蒙Next 自定义Span

export  struct AtUserView{
@ObjectLink atUserInfo:RichSpan
build() {
ContainerSpan(){
Span(this.atUserInfo.text)
.fontSize(15)
.fontColor($r(‘app.color.primary_color’))
.margin({ right: 2 })
if (this.atUserInfo.isMe){
ImageSpan(this.atUserInfo.isRead ? $r(‘app.media.img_at_read’) : $r(‘app.media.img_at_unread’))
.width(14)
.height(14)
}
}.textBackgroundStyle({color:’#7F007DFF’,radius:2})

}

}
Text() {
ForEach(this.viewModel.richContentSpan, (item: RichSpan) => {
if (item.type == RichSpanType.emoji) {
ImageSpan($rawfile(item.text))
.width(20)
.height(20)
} else if (item.type == RichSpanType.at) {
AtUserView({ atUserInfo: item })
} else if (item.type == RichSpanType.link) {
Span(item.text)
.fontColor($r(‘app.color.primary_color’))
.fontSize(15)
} else {
Span(item.text)
.fontColor($r(‘app.color.text’))
.fontSize(15)

}
})
}

在lazyforeach里如果加载更多数据时。AtUserView会直接没有宽高

1 回复

在HarmonyOS鸿蒙Next系统中,自定义Span通常涉及对文本布局和样式的精细控制,这在开发富文本应用或需要高度定制文本显示效果的场景中尤为关键。自定义Span允许开发者定义文本的外观(如颜色、字体、大小)以及行为(如点击事件处理)。

实现自定义Span,一般步骤包括:

  1. 创建自定义Span类:继承ReplacementSpanMetricAffectingSpan或其他适当的Span基类,根据需求重写相关方法。例如,重写draw方法来控制绘制逻辑,或重写measure方法来影响文本测量。

  2. 在文本中应用自定义Span:使用SpannableStringSpannableStringBuilder来包装你的文本,并通过setSpan方法将自定义Span应用到文本的特定部分。

  3. 在布局中显示:将处理后的SpannableStringSpannableStringBuilder设置到TextView或其他支持Spannable文本的视图组件中。

确保你的开发环境已正确配置为支持HarmonyOS鸿蒙Next SDK,并检查所有相关依赖项是否已更新至最新版本。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部