首页 > 其他分享 >【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段

【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段

时间:2024-09-10 14:53:30浏览次数:3  
标签:脚本 text htmlHrefTxt CustomSpan CustomSpanType 超链接 new 文本


预览效果如图(网上找到demo,如有疑问请留评论蛤!):

这个是超链接

【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段_html


例子的数据结构如下:

new CustomMessage($r('app.media.styled_text_user_image1'), '央视新闻', '2小时前', [
    new CustomSpan(CustomSpanType.Normal, '【准备回家!'),
    new CustomSpan(CustomSpanType.Hashtag, '#神十七乘组4月30日回地球#'),
    new CustomSpan(CustomSpanType.Normal, '】'),
    new CustomSpan(CustomSpanType.Hashtag, '#神十八太空过国庆节#'),
    new CustomSpan(CustomSpanType.Normal, '\n按计划,在轨驻留期间,神十八乘组将迎来天舟八号货运飞船、神舟十九号载人飞船的来访,计划于今年10月下旬返回东风着陆场。\n祝一切顺利!'),
    new CustomSpan(CustomSpanType.Hashtag, '#神十八新闻发布会#'),
    new CustomSpan(CustomSpanType.Normal, '\n神十七乘组在与神十八乘组完成在轨轮换后,计划于本月30日返回东风着陆场。\n祝一切顺利!'),
  ], $r("app.media.styled_text_user_image1")),

这是例子里的数据定义方式,和从接口里解析的json数据有所区别
再看看其他预览效果,比如有html超链接

1.超链接

未处理截图如下:

【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段_harmonyos_02


html a标签提取

const anchorRegex: RegExp = /<a[^>]+href=["']([^"']+)["'][^>]*>(.*?)<\/a>/gi;

【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段_harmonyos_03


添加点击事件,加超链接效果

【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段_鸿蒙系统_04

public static extractHtmlAnchors(htmlStr: string): Array<HtmlHrefTxt> {
    const anchorRegex: RegExp = /<a[^>]+href=["']([^"']+)["'][^>]*>(.*?)<\/a>/gi;
    const anchors: Array<HtmlHrefTxt> = [];
    let matches=anchorRegex.exec(htmlStr)
    if (matches!== null) {
      // 将匹配到的href和文本内容添加到结果数组
      anchors.push({
        source:htmlStr,
        target:htmlStr.replace(anchorRegex, matches[2]),
        href: matches[1],
        text: matches[2]
      });
    }
    // 使用正则表达式替换所有匹配的<a>标签
    return anchors;
  }

UI 加载效果如下:

Text('超链接')
        .id('TextMoreStylePageHelloWorld')
        .titleStyle()

      Text() {
        ForEach(StringUtils.extractHtmlAnchors(LinkTextStr), (htmlHrefTxt: HtmlHrefTxt, index: number) => {
          ForEach(htmlHrefTxt.target.split(new RegExp(`(${htmlHrefTxt.text})`, 'gi'))
            , (itemTxt: string, index: number) => {
              if (itemTxt === htmlHrefTxt.text) {
                TextLinkSpan({
                  item: new CustomSpan(
                    CustomSpanType.Normal
                    , htmlHrefTxt.text
                    , htmlHrefTxt.href
                  )
                })
              } else {
                Span(itemTxt)
              }
            })
        })
      }
      .fontSize(12)

详情可查看 下面 demo 工程地址

2.文本高亮

【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段_harmonyos_05

public static stringHighLightShow(highLightStr: string, txt: string): Array<string> {
    let spanArray: Array<string> = []
    const highlightRegex: RegExp = new RegExp(`(${highLightStr})`, 'gi')
    spanArray = txt.split(highlightRegex)
    return spanArray
  }

3.凸显字体大小

【Harmony】文本高亮显示、关键字凸显字体大小、颜色、背景色等风格自定义、嵌入html脚本提取超链接及超链接文本或其他脚本片段_鸿蒙_06

.fontSize('秋' === txt ? 18 : 13)

4.凸显背景色-没生效

.backgroundColor(Color.Gray)

5.小结

对文本的各种操作中,大致都有正则提取成文本数组,然后根据需求装饰文本数组即可。
正则表达式虽然不难,但因为用到的地方不多,突然要写,笔者也不擅长正则碰到这样的情况也抓瞎。不过好在如今大模型 AI 很多,我一般选择 kimi 直接就能拿到所需的正则

6、demo 工程地址

Demo 工程


标签:脚本,text,htmlHrefTxt,CustomSpan,CustomSpanType,超链接,new,文本
From: https://blog.51cto.com/u_16264967/11971640

相关文章

  • PLC结构化文本(ST)——FB系统内置方法(Init、exit、reinit)
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——FB系统内置方法(Init、exit、reinit)IEC61131-3FB系统内置方法FB_init隐式或显式初始化功能块,第一次下载运行程序时初始化时自动调用。该方法类似于C#类的构造函数,用于初始化类。FB_exit在功能块被销毁时......
  • Shell脚本基础、组成结构、调试、运算符
    思维导图:一、脚本基础1、shell编程介绍与特性        Shell是种命令解释程序,也可以看作是一种命令语言的解释器。用户在与Shell交互时所输入的命令行必须符合Shell命令的语法和语义规范,才能够被Shell理解并执行。Shell所使用的这种命令语言称为Shell语言。Shell语......
  • jmeter通过beanshell中脚本实现随机获取某天(“yyyy-MM-dd HH:mm:ss“)前1周,一个月,一
    在接口测试中,请求参数中涉及时间的参数可能不是固定死的,因此jmeter想通过beanshell中脚本实现随机获取某天(statusTimeEnd(“yyyy-MM-ddHH:mm:ss”))前1周,一个月,一个季度,半年的时间0点,其中statusTimeEnd的值在用户参数中已配置。参考JMeter性能测试实战的方法:http://lit......
  • NLTK英文文本分词的常用模块
    目录1.断句模块:2.分词模块:3.去除文本中的除标点符号:4.去除停用词:5.词频提取与词频绘图: 5.1词频的提取5.2画出词频5.3画出出现频率最高的三个词 6.单词搜索1.断句模块:importnltkfromnltk.tokenizeimportsent_tokenize#英文断句模块#要断句的文本parag......
  • 搭建单机版DolphinScheduler,并编写启动关闭脚本
    一.为什么要搭建单机版DolphinScheduler支持多种部署模式,包括单机模式(Standalone)、伪集群模式(Pseudo-Cluster)、集群模式(Cluster)等。在其他模式下配置完成后启动会非常的吃内存,对电脑非常的不友好。而单机模式就不会有这种情况,在我的虚拟机里启动单机模式后大概也就占了1G左右......
  • 【Shell-多并发】使用Shell脚本在循环中进行多并发的操作
    【Shell-多并发】使用Shell脚本在循环中进行多并发的操作1)方式一(利用for循环)1.1.案例一(缺少wait导致执行顺序有误)1.2.案例二(缺少控制阻塞导致任务全部执行)1.3.案例三(最终版)2)方式二(利用命名管道来做任务队列)3)Shell脚本中$的含义1)方式一(利用for循环)1.1.案例一(缺少wait......
  • js中eval执行的脚本参数不固定,并且脚本中有return时,如何处理
    最近就遇到了用eval执行动态脚本时,拿不到return中的值的问题,如下界面:点击测试函数,进行计算,计算时遇到两点问题:1.传入的参数是动态的,如何解决变量声明问题?2.eval进行执行脚本时,拿不到return的值?现在将代码贴下,查看解决方案:functionemrscript():any{letobj={}......
  • 安装mayavi命令,使用cxfreeze打包python脚本
    pipinstallnumpy出现Anewreleaseofpipisavailable:23.2.1->24.2输入:python-mpipinstall--upgradepipsetuptoolswheelpipinstallPyQt5pipinstallvtkpipinstallmayavipipinstallscipypipinstallconfigobj 查看当前项目的依赖包:pipfr......
  • PLC结构化文本(ST)——枚举_to_string(to_string)
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——枚举_to_string(to_string)attribute'to_string'pragma会影响使用运算符TO_STRING/TO_WSTRING的枚举组件的转换结果的输出方式:如果枚举声明随pragma一起提供,则枚举组件的名称将显示为字符串,而不是数值......
  • JS – 支持WORD上传的富文本编辑器
    编辑器:TinyMCE前端:vue2,vue3,vue-cli,html5,jquery后端:java,jsp,springboot,asp,asp.net,.netcore,php需求:导入word之前在网上也找过相关的资料,但是基本上都没什么用。能用的少,好用的就更少了。公司这块的话是做项目为主的,也有自己的产品,领导希望是在我们自己的产品中......