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

本文主要是介绍鸿蒙界面开发——组件(6):属性字符串(StyledString)文本输入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

属性字符串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) {
//ImageAttachmentthis.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")//获取图片URLthis.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也可以吧。。。。。。。。。。

这篇关于鸿蒙界面开发——组件(6):属性字符串(StyledString)文本输入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141867

相关文章

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

Java实现在Word文档中添加文本水印和图片水印的操作指南

《Java实现在Word文档中添加文本水印和图片水印的操作指南》在当今数字时代,文档的自动化处理与安全防护变得尤为重要,无论是为了保护版权、推广品牌,还是为了在文档中加入特定的标识,为Word文档添加... 目录引言Spire.Doc for Java:高效Word文档处理的利器代码实战:使用Java为Wo

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java使用正则提取字符串中的内容的详细步骤

《Java使用正则提取字符串中的内容的详细步骤》:本文主要介绍Java中使用正则表达式提取字符串内容的方法,通过Pattern和Matcher类实现,涵盖编译正则、查找匹配、分组捕获、数字与邮箱提... 目录1. 基础流程2. 关键方法说明3. 常见场景示例场景1:提取所有数字场景2:提取邮箱地址4. 高级

Python文本相似度计算的方法大全

《Python文本相似度计算的方法大全》文本相似度是指两个文本在内容、结构或语义上的相近程度,通常用0到1之间的数值表示,0表示完全不同,1表示完全相同,本文将深入解析多种文本相似度计算方法,帮助您选... 目录前言什么是文本相似度?1. Levenshtein 距离(编辑距离)核心公式实现示例2. Jac

Python中高级文本模式匹配与查找技术指南

《Python中高级文本模式匹配与查找技术指南》文本处理是编程世界的永恒主题,而模式匹配则是文本处理的基石,本文将深度剖析PythonCookbook中的核心匹配技术,并结合实际工程案例展示其应用,希... 目录引言一、基础工具:字符串方法与序列匹配二、正则表达式:模式匹配的瑞士军刀2.1 re模块核心AP