HarmonyOS 鸿蒙Next 自定义Span
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,一般步骤包括:
-
创建自定义Span类:继承
ReplacementSpan
、MetricAffectingSpan
或其他适当的Span基类,根据需求重写相关方法。例如,重写draw
方法来控制绘制逻辑,或重写measure
方法来影响文本测量。 -
在文本中应用自定义Span:使用
SpannableString
或SpannableStringBuilder
来包装你的文本,并通过setSpan
方法将自定义Span应用到文本的特定部分。 -
在布局中显示:将处理后的
SpannableString
或SpannableStringBuilder
设置到TextView或其他支持Spannable文本的视图组件中。
确保你的开发环境已正确配置为支持HarmonyOS鸿蒙Next SDK,并检查所有相关依赖项是否已更新至最新版本。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。