美文网首页
鸿蒙--Text中部分字体特殊处理

鸿蒙--Text中部分字体特殊处理

作者: 逃离_102 | 来源:发表于2024-01-10 11:39 被阅读0次

问题

Text部分字体变色,在应用中处理是很常见的操作。 RichText富文本组件,解析并显示HTML格式文本,通HTML实现,但是这个不太好用,在跟其他组件一起使用时自适应宽高的时候很难处理,要么就给固定宽高还可以。

解决方式

目前我的处理方式是:Text要显示的string做切割,然后用ForEach在Text中加Span组件,在Span组件中对文字做相应的特殊处理,这样可保证Text属性的延续,又可以处理各种特殊情况,就是拆分、计算等比较麻烦。

示例,高亮显示代码如下

export class StringUtils {
  public static readonly REGEX_B_S = "<B>"
  public static readonly REGEX_B_E = "</B>"
 
  /**
   * 获取高亮字符串列表
   * @param str 原始字符串
   */
  public static getHlList(str ?: string, regex ?: string): HlContent[] {
    if (str == undefined) {
      return []
    }
 
    let list: HlContent[] = []
    if (regex == undefined || !str.includes(regex)) {
      let content = new HlContent()
      content.content = str
      list.push(content)
      return list
    }
 
    if (StringUtils.REGEX_B_S == regex) {
      let splitStr: string[] = str.split(regex)
      for (let i = 0; i < splitStr.length; i++) {
        let temp = StringUtils.getHlList(splitStr[i], StringUtils.REGEX_B_E)
        if (temp != null && temp.length > 0) {
          list = list.concat(temp)
        }
      }
    }
    if (StringUtils.REGEX_B_E == regex) {
      let content1 = new HlContent()
      content1.isHl = true
      content1.content = str.substring(0, str.indexOf(regex))
      list.push(content1);
 
      let startIndex = str.indexOf(regex) + StringUtils.REGEX_B_E.length
      let endIndex = str.length
      if (startIndex < endIndex) {
        let content2 = new HlContent()
        content2.content = str.substring(startIndex, endIndex)
        list.push(content2);
      }
    }
 
    return list
  }
}
 
export class HlContent {
  content: string = ""
  isHl: boolean = false
}
 
import { HlContent, StringUtils } from './StringUtils';
@Entry
@Component
struct Index {
  @State text : string = '测试一下<B>高亮</B>其他位置再来一个<B>高亮</B>'
  build() {
    Column(){
      Text(){
        ForEach(StringUtils.getHlList(this.text, StringUtils.REGEX_B_S), (item: HlContent) => {
          if (item != null && item.content != null && item.content.length > 0) {
            if (item.isHl) {
              Span(item.content).fontColor("#ffff4500")
            } else {
              Span(item.content).fontColor("#ff000000")
            }
          }
        })
      }.fontSize(18).textOverflow({ overflow: TextOverflow.Ellipsis })
      .maxLines(1).fontWeight(FontWeight.Bold).margin({top:8})
    }
  }
}

总结

示例中只是一种情况的处理,可自行根据需求特殊处理。

相关文章

  • 微信小程序rich-text中的nodes属性

    微信小程序中的rich-text可以接收转移html标签 字体的样式处理 可以通过 给rich-text添加类名设...

  • Markdown基本操作(初学者)

    Markdown 一、字体 1:加粗 加粗部分用两个*括起来例:**Text** Text 2.斜体 斜体部分用一...

  • Core Text 编程指南01:Core Text 概述

    Core Text是一种用于布局文本和处理字体的高级底层技术。 Core Text直接与Core Graphics...

  • 网页中特殊字体如何处理?

    开发中遇到这个问题,如果使用UI提供的字体库,经转换后也要10几M。今天发现一个web字体自动生成神器:【字珠】 ...

  • 中文字体Web开发规范

    特殊字体的处理方式 设计稿的处理中,有些字体只有设计师有,需要前端拓展了系统字库才能显示正确的效果。对于前端页面使...

  • vue中怎么引入字体包

    项目中遇到一些特殊的字体 需要引入我们需要提前下载好这个字体 一 创建文件夹 存放字体在src目录下创建text文...

  • 文本溢出处理

    单行文字溢出 css处理 有三个属性text-overflow: ellipsis; 设置字体超出变成.......

  • Unity中的UGUI各个组件参数详解

    1.Text(文本) Text:输入文本显示 Character Font:字体 Font Style:字体样式...

  • 鸿蒙尝试(二)

    环境和其它配置请看(一) 布局部分 想到哪里写到哪里了。。。 1,Text 换行显示 2,鸿蒙日志 HiLogLa...

  • 制作字体的两个方法

    app对字体显示有特殊要求时,开发会在安装包里放入字体文件。最近就遇到需要加入特殊数字和部分符号的字体,以下: 字...

网友评论

      本文标题:鸿蒙--Text中部分字体特殊处理

      本文链接:https://www.haomeiwen.com/subject/xohzndtx.html