news 2026/7/16 10:23:45

HarmonyOS7 富文本与图文混排:Text 进阶用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS7 富文本与图文混排:Text 进阶用法

文章目录

    • 前言
    • Span:一段里多种样式
      • 代码实现
    • ImageSpan:文字里插图片
      • 核心代码
    • 可点击的富文本(链接/@提及)
      • 完整示例
    • 实战:一条带表情的评论
    • 常见误区(小白必踩)
    • 完整可运行示例:图文混排
      • 代码解析
    • 写在最后

前言

普通Text('一段文字')只能显示单一样式。但真实内容常常"一段里又有红字、又有链接、又插了个小图标"——这叫富文本 / 图文混排

HarmonyOS 的Text通过SpanImageSpanEmojiSpan等子组件实现富文本。这篇文章把最常用的混排玩法讲清,让你做出"像微信那种"的富内容。

Span:一段里多种样式

Text里面可以放多个Span,每个 Span 单独设样式:

代码实现

Text(){Span('价格:').fontSize(14).fontColor('#666666')Span('¥99').fontSize(20).fontColor('#FF4500').fontWeight(FontWeight.Bold)Span(' 限时').fontSize(12).fontColor('#FFFFFF').backgroundColor('#FF4500').padding({left:4,right:4})}

讲解:

  • Text() { Span() Span() ... }:Span 是 Text 的"内联子段",拼成一行富文本。
  • 每个 Span 独立设字号、颜色、背景——于是"价格:¥99 限时"里,数字红且大、标签带底色。
  • 适合做商品标题、提示语这类"一段多风格"文字。

ImageSpan:文字里插图片

想在一行文字里塞个小图标或表情?用ImageSpan

核心代码

Text(){Span('点击')ImageSpan($r('app.media.icon_arrow')).width(16).height(16).verticalAlign(ImageSpanAlignment.CENTER)// 垂直居中于文字Span('查看详情')}
  • ImageSpanSpan混排在Text里,实现"文字 + 图标"同行。
  • verticalAlign控制图片相对文字的对齐,避免图标飘在上面。

可点击的富文本(链接/@提及)

给某段加点击:

完整示例

Text(){Span('@小明 ').fontColor('#4A90E2').onClick(()=>{this.openUser('小明')})Span('评论了你的动态')}

Span也支持onClick,于是"@某人"可点进主页、"链接"可点跳转——这就是社交 app 评论区的做法。

实战:一条带表情的评论

Text(){ImageSpan($r('app.media.emoji_smile')).width(20).height(20).verticalAlign(ImageSpanAlignment.CENTER)Span(' 今天天气真好!').fontSize(15)Span(' #周末去哪玩').fontColor('#4A90E2').onClick(()=>this.openTopic())}

一个Text里同时有表情图、普通文字、可点话题,这就是典型的富内容行。

常见误区(小白必踩)

误区说明
用多个Text拼接代替Span"一段多风格"文字用Text(){ Span() Span() },别拆成多个 Text 拼行。
ImageSpan不对齐图片插在文字里要设verticalAlign居中,否则图标飘在上面。
Span 嵌套太深可以嵌套但不宜过深,超长富文本注意性能。

下面这段代码可以直接复制到 DevEco Studio 里运行。建议你边读边敲,改一改文末「动手改一改」里的参数,亲眼看看效果。

完整可运行示例:图文混排

Span在一个Text里混排文字与样式。

代码解析

// Text 内用 Span 做富文本@Entry@Componentstruct RichText{build(){Column({space:16}){Text(){Span('特价 ').fontSize(16)Span('¥99').fontSize(24).fontColor('#E53935').fontWeight(FontWeight.Bold)Span(' 仅限今天').fontSize(12).fontColor('#999')}// 图文混排:Image 作为 SpanText(){ImageSpan($r('app.media.icon')).width(20).height(20)Span(' 已认证商家').fontSize(14)}}.padding(20)}}

你会看到什么:一行里「特价」小字 + 红色大字「¥99」+ 灰色「仅限今天」混排;另一行图标和文字并排,像电商商品标签。

动手改一改

  • Span.decoration({ type: TextDecorationType.LineThrough })做删除线价。
  • ImageSpan拼出「图标+文字+图标」的标签条。
  • 把整段抽成函数,按数据动态生成富文本。

写在最后

富文本就三件套:Span 管文字分段样式、ImageSpan 管插图、onClick 管交互。把它们塞进同一个Text,就能做出微信评论、商品标题、带图标签这类"一行多形态"的内容。

提醒:Span 里再嵌 Span 是允许的,但别嵌套太深;超长富文本注意性能,必要时分多个 Text。现在就把你项目里的"拼接字符串 + 多个 Text"改成 Span 混排,排版会专业很多。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/16 10:21:32

Android 8.1精准安装Frida 12.8.10并配置VSCode代码提示完整指南

1. 项目概述:为什么我们需要告别手动查版本? 如果你和我一样,长期在Android安全分析、逆向工程或者应用动态调试的泥潭里摸爬滚打,那你一定对“版本地狱”这个词深有体会。尤其是当我们面对像Frida这样版本迭代快、依赖关系复杂的…

作者头像 李华
网站建设 2026/7/16 10:21:02

实战爬虫:从URL结构解析到数据抓取策略

1. URL结构解析:理解网页地址的密码当你每天在浏览器地址栏输入网址时,有没有想过那一串字符背后的秘密?URL就像互联网世界的GPS坐标,精确指引着每个资源的所在位置。以B站视频链接为例:https://www.bilibili.com/vide…

作者头像 李华
网站建设 2026/7/16 10:20:38

Linux操作系统核心特性与应用场景全解析

1. Linux 的核心定位与特性解析Linux 作为一款开源操作系统内核,自1991年由 Linus Torvalds 发布以来,已经发展成为全球最重要的基础软件之一。与商业操作系统不同,Linux 采用 GPL 许可证,这意味着任何人都可以自由使用、修改和分…

作者头像 李华
网站建设 2026/7/16 10:20:35

第二章 linux中执行命令

1.命令格式格式 主命令 选项 操作对象 主命令内置命令:由 shell 程序自带的命令,速度快外置命令:有独立的可执行程序文件,执行时需要从磁盘加载对应的程序文件,文件名通常就 是命令名选项指定命令的运行…

作者头像 李华
网站建设 2026/7/16 10:18:24

DamaiHelper终极指南:用Python自动化脚本轻松抢购演唱会门票

DamaiHelper终极指南:用Python自动化脚本轻松抢购演唱会门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper DamaiHelper是一款基于Python和Selenium技术栈开发的大麦网抢票脚本&…

作者头像 李华