鸿蒙界面开发——组件(6):属性字符串(StyledString)文本输入

news2024/12/25 10:35:19

属性字符串StyledString/MutableStyledString

MutableStyledString继承于StyledString,以下统一简称StyledString。
是功能强大的标记对象,可用于字符或段落级别设置文本样式。
通过将StyledString附加到文本组件, 可以通过多种方式更改文本,包括修改字号、添加字体颜色、使文本可点击以及自定义方式绘制文本等。
方便灵活应用文本样式的对象,可通过TextController(Text组件的控制器)中的setStyledString方法与Text组件绑定,
可通过RichEditorStyledStringController中的setStyledString方法与RichEditor组件绑定。

可以通过TextController提供的setStyledString(StyledString)方法将属性字符串附加到文本组件,并推荐在onPageShow中触发绑定,在aboutToAppear中调用setStyledString无法实现页面初始即可见属性字符串文本内容,因为aboutToAppear运行时组件还没有完成创建并成功挂载节点树。

styledString: StyledString = new StyledString("运动45分钟")

controller: TextController = new TextController()

this.controller.setStyledString(this.StyledString)  触发绑定或更新属性字符串。
↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
async onPageShow() {//在onPageShow中触发绑定
 this.controller.setStyledString(this.styledString)
}

规则说明

当组件样式和属性字符串中的样式冲突时,冲突部分以属性字符串设置的样式为准,未冲突部分则生效组件的样式。
当属性字符串和Text子组件冲突时,属性字符串优先级高,即当Text组件中绑定了属性字符串,忽略Text组件的content参数和包含Span等子组件的情况。
不支持@State修饰。

StyledString 对象?

constructor(value: string | ImageAttachment | CustomSpan , styles?: Array<StyleOptions>)
styledString: StyledString = new StyledString("运动45分钟")

value string | ImageAttachment | CustomSpan 是 属性字符串文本内容。
说明:当value值为ImageAttachment或CustomSpan时,styles参数不生效。

styles Array<StyleOptions> 否 属性字符串初始化选项。
说明:start为异常值时,按默认值0处理。
当start的值合法且length为异常值时,length的值为属性字符串长度与start的值的差值。
StyledStringKey与StyledStringValue不匹配时,不生效。styledKey参数无默认值。

StyleOptions对象说明
参数名 类型 必填 说明
start number 否 设置属性字符串样式的开始位置。
length number 否 设置属性字符串样式的长度。

styledKey StyledStringKey 是 样式类型的枚举值。
FONT 字体样式键。TextStyle所属键。
DECORATION 文本装饰线样式键。DecorationStyle所属键。
BASELINE_OFFSET 文本基线偏移量样式键。BaselineOffsetStyle所属键。
LETTER_SPACING 文本字符间距样式键。LetterSpacingStyle所属键。
LINE_HEIGHT 文本行高样式键。LineHeightStyle所属键。
TEXT_SHADOW 文本阴影样式键。TextShadowStyle所属键。
GESTURE 事件手势键。GestureStyle所属键。
PARAGRAPH_STYLE 段落样式键。ParagraphStyle所属键。
IMAGE 图片键。ImageAttachment所属键。
CUSTOM_SPAN 自定义绘制Span键。CustomSpan所属键。
USER_DATA UserDataSpan键。UserDataSpan所属键。
详细学习如何创建这些对象:here

styledValue StyledStringValue 是 样式对象。属性字符串目前提供了TextStyle、TextShadowStyle、DecorationStyle、BaselineOffsetStyle、LineHeightStyle、LetterSpacingStyle各种Style对象来实现设置文本的各类样式。

ImageAttachment图片对象说明
value PixelMap 是 是 获取属性字符串的图片数据源。
size SizeOptions 是 否 获取属性字符串的图片尺寸。
verticalAlign ImageSpanAlignment 是 否 获取属性字符串的图片对齐方式。
objectFit ImageFit 是 否 获取属性字符串的图片缩放类型。
layoutStyle ImageAttachmentLayoutStyle 是 否 获取属性字符串的图片布局。

StyledString 属性

  1. getString(): string获取字符串信息。
  2. equals(other: StyledString): boolean 判断两个属性字符串是否相等。
  3. 获取属性字符串的子字符串。subStyledString(start: number , length?: number): StyledString
  4. 获取指定范围属性字符串的样式集合。getStyles(start: number , length: number , styledKey?: StyledStringKey): Array
  5. static fromHtml(html: string): Promise 将HTML格式字符串转换成属性字符串,当前支持转换的HTML标签范围:< p>、< span>、< img>。仅支持将这三种标签中的style属性样式转换成对应的属性字符串样式。

设置文本样式

属性字符串目前提供了TextStyle、TextShadowStyle、DecorationStyle、BaselineOffsetStyle、LineHeightStyle、LetterSpacingStyle各种Style对象来实现设置文本的各类样式。

textStyleAttrs: TextStyle = new TextStyle({ fontWeight: FontWeight.Bolder, fontSize: LengthMetrics.vp(24), fontStyle: FontStyle.Italic })
mutableStyledString: MutableStyledString = new MutableStyledString("运动35分钟 目标达成", [
  {
    start: 2,
    length: 2,
    styledKey: StyledStringKey.FONT, //StyledStringKey 样式类型的枚举值 StyledStringKey.FONT是字体样式键。TextStyle所属键。
    styledValue: this.textStyleAttrs
  },
  {
    start: 7,
    length: 4,
    styledKey: StyledStringKey.FONT,
    styledValue: new TextStyle({ fontColor: Color.Orange, fontSize: LengthMetrics.vp(12)})
  }
]);

在这里插入图片描述

MutableStyledString 可变的属性字符串

继承于StyledString类。经常用的是MutableStyledString,更丰富的属性方法?。

  1. 替换指定范围的字符串。replaceString(start: number , length: number , other: string): void
  2. 插入字符串。insertString(start: number , other: string): void
  3. 移除指定范围的字符串。removeString(start: number , length: number): void 当属性字符串中包含图片时,同样生效。
  4. 替换指定范围内容为指定类型新样式。replaceStyle(spanStyle: SpanStyle): void
  5. 为指定范围内容设置指定类型新样式。setStyle(spanStyle: SpanStyle): void
    拓:SpanStyle的参数说明同StyleOptions
 spanStyle: SpanStyle = {
   start: 0,
   length: 5,
   styledKey: StyledStringKey.FONT,
   styledValue: new TextStyle({ fontColor: Color.Pink })
 };
 
 this.mutableStyledString.setStyle(this.spanStyle)
  1. 清除指定范围内容的指定类型样式。removeStyle(start: number , length: number , styledKey: StyledStringKey): void
    被清空样式类型对象属性使用的是对应Text组件属性的设置值,若Text组件未设置值,则使用对应Text组件属性的默认值。当属性字符串中包含图片时,同样生效。
  2. removeStyles(start: number , length: number): void
  3. 清除属性字符串对象的所有样式。clearStyles(): void被清空样式类型对象属性使用的是对应Text组件属性的设置值,若Text组件未设置值,则使用对应Text组件属性的默认值。
  4. 替换指定范围为新的属性字符串。replaceStyledString(start: number , length: number , other: StyledString): void
  5. 在指定位置插入新的属性字符串。 insertStyledString(start: number , other: StyledString): void
  6. 在末尾位置追加新的属性字符串。appendStyledString(other: StyledString): void

设置段落样式

可通过ParagraphStyle设置段落样式布局。下图显示了如何分割文本中的段落,段落以换行符 \n 结尾。

使用图片

可通过ImageAttachment来添加图片。
在这里插入图片描述

3.使用
if (this.imagePixelMap !== undefined) {
//ImageAttachment
  this.mutableStr = new MutableStyledString(new ImageAttachment({
    value: this.imagePixelMap,
    size: { width: 180, height: 160 },
    verticalAlign: ImageSpanAlignment.BASELINE,
    objectFit: ImageFit.Fill
  }))

2.引用
async aboutToAppear() {
    console.info("aboutToAppear initial imagePixelMap")
    //获取图片URL
    this.imagePixelMap = await this.getPixmapFromMedia($r('app.media.sea'))
  }
//这个同步。。是干嘛的
  private async getPixmapFromMedia(resource: Resource) {
    let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({
      bundleName: resource.bundleName,
      moduleName: resource.moduleName,
      id: resource.id
    })
    let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength))
    let createPixelMap: image.PixelMap = await imageSource.createPixelMap({
      desiredPixelFormat: image.PixelMapFormat.RGBA_8888
    })
    await imageSource.release()
    return createPixelMap
  }

1.定义
 imagePixelMap: image.PixelMap | undefined = undefined

场景实例

在这里插入图片描述
用row和Text也可以吧。。。。。。。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2109451.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习-用神经网络NN实现足球大小球数据分析软件

文章目录 前言一、 数据收集1.1特征数据收集代码实例 二、数据预处理清洗数据特征工程&#xff1a; 三、特征提取四、模型构建五、模型训练与评估总结 前言 预测足球比赛走地大小球&#xff08;即比赛过程中进球总数是否超过某个预设值&#xff09;的深度学习模型是一个复杂但有…

霍尼韦尔、书客、米家护眼大路灯怎么样?终极测评对比和护眼灯王者机型

霍尼韦尔、书客、米家护眼大路灯怎么样&#xff1f;护眼大路灯的重要性不容忽视&#xff0c;它是我们日常生活中用眼的必备工具&#xff0c;也是眼睛能够得到保护重要一环。近年来&#xff0c;护眼大路灯市场呈现出国际大牌的垄断局面&#xff0c;但这也带来了一些问题。为了争…

油猴插件录制请求,封装接口自动化参数

参考&#xff1a;如何使用油猴插件提高测试工作效率 一、背景 在酷家乐设计工具测试中&#xff0c;总会有许多高频且较繁琐的工作&#xff0c;比如&#xff1a; 查询插件版本&#xff1a;需要打开Chrome控制台&#xff0c;输入好几个命令然后过滤出版本信息。 查询模型商品&…

java设计模式day03--(结构型模式:代理模式、适配器模式、装饰者模式、桥接模式、外观模式、组合模式、享元模式)

5&#xff0c;结构型模式 结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式&#xff0c;前者采用继承机制来组织接口和类&#xff0c;后者釆用组合或聚合来组合对象。 由于组合关系或聚合关系比继承关系耦合度低&#xff0c;满足“…

SpingBoot中使用Swagger快速生成接口文档

目录 一.Swagger快速上手 二.Swagger中的基本注解 三.使用Swagger进行测试 一.Swagger快速上手 Swagger是⼀个接⼝⽂档⽣成⼯具&#xff0c;它可以帮助开发者⾃动⽣成接⼝⽂档。当项⽬的接⼝发⽣变更时&#xff0c;Swagger可以实时更新⽂档&#xff0c;确保⽂档的准确性和时…

【神经网络系列(高级)】神经网络Grokking现象的电路效率公式——揭秘学习飞跃的秘密【通俗理解】

【通俗理解】神经网络Grokking现象的电路效率公式 论文地址&#xff1a; https://arxiv.org/abs/2309.02390 参考链接&#xff1a; [1]https://x.com/VikrantVarma_/status/1699823229307699305 [2]https://pair.withgoogle.com/explorables/grokking/ 关键词提炼 #Grokkin…

组合优化与凸优化 学习笔记3 凸函数

目前学到了73页 凸函数的定义&#xff1a; 人话&#xff1a;函数f的定义域是凸集&#xff08;在一般的情况下就是不能是断开的定义域&#xff08;一般的情况是1维的嘛&#xff09;&#xff0c;假如x是什么多维向量的话就是说x的取值范围是一个凸集内&#xff09;&#xff0c;并…

基于云原生向量数据库 PieCloudVector 的 RAG 实践

近年来&#xff0c;人工智能生成内容&#xff08;AIGC&#xff09;已然成为最热门的话题之一。工业界出现了各种内容生成工具&#xff0c;能够跨多种模态产生多样化的内容。这些主流的模型能够取得卓越表现&#xff0c;归功于创新的算法、模型规模的大幅扩展&#xff0c;以及海…

XXL-JOB调度中心与执行器

XXL-JOB是一个轻量级的分布式任务调度平台&#xff0c;主要由调度中心和执行器两部分组成。下面详细讲解调度中心与执行器的功能和作用。 调度中心 调度中心是XXL-JOB的核心组件&#xff0c;负责任务的调度管理。其主要功能包括&#xff1a; 任务管理&#xff1a;调度中心提供…

计算组合数:scipy.special.comb()

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 计算组合数&#xff1a; scipy.special.comb() 选择题 以下代码两次输出的结果是&#xff1f; from scipy.special import comb print("【执行】print(comb(3,2))") print(comb(3…

011. Oracle-约束

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

小白学装修 之 硬装阶段

在准备阶段 了解了 装修的基本概念 顺利收房 进行了需求和预算的大致规划 并且完成了简单的自主设计接下来就是带着自己的设计图 预算和想法 去找公司或者施工方了 找施工方 可以是 设计师和施工方分开找 也可以找有设计的装修公司 或者 有施工能力的设计室都行 但不 管哪…

【#第三期实战营闯关作业 ## 茴香豆:企业级知识库问答工具】

今天学习了《 茴香豆&#xff1a;企业级知识库问答工具》这一课&#xff0c;对大模型的应用有了更深得认识。以下是记录本课实操过程及截图&#xff1a; 搭建茴香豆虚拟环境&#xff1a; 输入以下命令 studio-conda -o internlm-base -t huixiangdou 成功安装虚拟环境截图 …

OpenAI gym CarRacing-v2 episode termination

题意&#xff1a;OpenAI Gym CarRacing-v2 赛道终止处理 问题背景&#xff1a; I am using gym0.26.0 library and am trying to understand what means that an episode is finished/done in the CarRacing-v2 environment. In the documentation is written this. 我正在使…

用Python实现时间序列模型实战——Day 12: 状态空间模型

一、学习内容 1. 状态空间模型的基本概念 状态空间模型是一种用于时间序列分析的强大工具&#xff0c;能够描述具有潜在状态动态变化的系统。该模型通过显式地建模时间序列中的潜在状态&#xff08;即隐藏变量&#xff09;&#xff0c;能够捕捉复杂的动态结构&#xff0c;适用…

如何选择合适的变压吸附制氧设备

在选择合适的变压吸附(Pressure Swing Adsorption, PSA)制氧设备时&#xff0c;需要综合考虑多个因素以确保设备能够高效、稳定地运行&#xff0c;满足特定应用场景的需求。以下是一些关键步骤和考虑因素&#xff0c;帮助您做出明智的决策。 1. 明确应用需求 明确您的制氧需求至…

GNU_HASH确定函数地址

前言&#xff1a; 最近看了以下pwntoos的DynELF方法&#xff0c;对其中是如何获取到函数地址的过程很感兴趣&#xff0c;就研究了一下&#xff0c;对通过DT_GNU_HASH获取函数地址的过程有了比较清晰的了解 漏洞&#xff1a; 我这里使用2013-PlaidCTF进行测试&#xff0c;首先…

DeepDFA: 受控制流分析驱动的有效深度漏洞检测

目前基于深度学习的漏洞检测中性能最高的方法使用的是基于 token 的 transformer 模型&#xff0c;这对于捕捉漏洞检测所需的代码语义来说并不是最有效的。文中设计了一个受数据流分析启发的图学习框架 DeepDFA&#xff0c;以及一种能让图学习模拟数据流计算的嵌入技术。其训练…

打造温馨家居,全屋智能家居解决方案

智能家居全屋解决方案覆盖全屋照明、温度、娱乐影音等各种常见的日常生活需求、可通过一键设置联动场景来控制自己的家、也可通过语音对话来操控家中的照明、电器及各种场景模式任意切换&#xff0c;一键升级自己的智能家。 1.入户解决方案 通过智能指纹锁穿过玄关、进入大厅、…

贴心服务,一路随行:用友BIP商旅云6.0推出客服中心

在全球经济日益一体化的今天&#xff0c;企业商旅活动频繁且复杂&#xff0c;对高效、专业的客户服务需求与日俱增。为了精准对接企业商旅管理的需求与挑战&#xff0c;用友BIP商旅云6.0创新性地推出了客服中心&#xff0c;以全方位、全天候的贴心服务&#xff0c;为企业商旅活…