HarmonyOS 文本中<em></em>标签标记的内容高亮显示

咨询描述:

需求是接口返回的文本带html标签的内容(被<em></em>标记)按html格式高亮显示。例如:中共中央关于认真学习宣传贯彻党的<em>二十大</em>精神的决定。

上述的[二十大]要求高亮显示。

其他系统的实现:

binding.tvTitle.text = content.title?.let { HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_COMPACT) }

请教一下,HarmonyOS 的实现方式

HarmonyOS
2024-12-27 14:56:17
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
fox280

可以用正则表达式去匹配目标字符串,之后解析传入的标签内容,存入数组,在build中用forEach遍历数组,可以高亮“二十大”

关键代码如下:

class formatS {//定义为解析后的标签内容数组,str是要显示的内容,isAim为是否高亮标志
  str:string = "";
  isAim:boolean  =false;
}

function(): void {
  let reg = new RegExp("<em>[\u4e00-\u9fa5]+</em>");//定义为查找标签<em></em>
  let arr = reg.exec(this.newsStr)//定义为:执行reg之后得到的结构,需要判断是不是有
  if(arr){
    let reg1 = new RegExp("<em>");//定义为查找<em>标签,
    let reg2 = new RegExp("</em>")//定义为查找</em>标签
    let reg1Res =reg1.exec(arr[0]);//reg1执行结果
    let reg2Res =reg2.exec(arr[0]);//reg2执行结果
    let resStr = arr[0]
    if(reg1Res&&reg2Res){
      resStr = arr[0].substring(reg1Res.index+4,reg2Res.index);//获取目标高亮内容
    }
    let index= arr.index
    /*以下代码为将解析后的内容存入数组*/
    let befStr = this.newsStr.substring(0,index);
    let endStr = this.newsStr.substring(index,arr[0].length)
    this.formatStr.push({str:befStr,isAim:false});
    this.formatStr.push({str:resStr,isAim:true});
    this.formatStr.push({str:endStr,isAim:false});
  }
}

在build方法中:

ForEach(this.formatStr,(item:formatS)=>{
  if(item.isAim){
    Text(item.str).fontSize(20).fontColor(Color.Red);//对目标内容进行高亮处理
  }else{
    Text(item.str).fontSize(20);
  }
})
分享
微博
QQ
微信
回复
2024-12-27 17:19:10
相关问题
如何识别文本邮箱并高亮显示
541浏览 • 1回复 待解决
Text怎么显示带html标签文本
4690浏览 • 1回复 待解决
webview 如何显示文本html内容
2300浏览 • 1回复 待解决
HarmonyOS 怎么高亮显示搜索文字
231浏览 • 1回复 待解决
HarmonyOS 部分文本高亮解决方案
318浏览 • 1回复 待解决
Text匹配文字高亮显示
923浏览 • 1回复 待解决
HarmonyOS Html文本标签解析器
183浏览 • 1回复 待解决
如何实现标签文本换行
1187浏览 • 1回复 待解决
HarmonyOS NFC扫描标签内容用例代码
188浏览 • 1回复 待解决
Text怎么解析展示带html标签文本
2315浏览 • 1回复 待解决
HarmonyOS如何测量文本内容长度?
304浏览 • 0回复 待解决
HarmonyOS文本不支持trthtd标签
232浏览 • 1回复 待解决
HarmonyOS Text获取文本显示行数
451浏览 • 1回复 待解决
如何实现文本内容竖向布局
602浏览 • 1回复 待解决