1# RichText
2
3富文本组件,解析并显示HTML格式文本。
4
5- 适用场景:
6
7  RichText组件适用于加载与显示一段HTML字符串,且不需要对显示效果进行较多自定义的应用场景。RichText组件仅支持有限的通用属性和事件。具体见[属性](#属性)与[事件](#事件)小节。
8
9  RichText组件底层复用了Web组件来提供基础能力,包括但不限于HTML页面的解析、渲染等。因此使用RichText组件需要遵循Web约束条件。常见典型约束如下:
10
11  移动设备的视口默认值大小为980px,默认值可以确保大部分网页在移动设备下可以正常浏览。如果RichText组件宽度低于这个值,content内部的HTML则可能会产生一个可以滑动的页面被RichText组件包裹。如果想替换默认值,可以在content中添加以下标签:
12
13  ```html
14  <meta name="viewport" content="width=device-width">
15  ```
16
17- 不适用场景:
18
19  RichText组件不适用于对HTML字符串的显示效果进行较多自定义的应用场景。例如RichText组件不支持通过设置属性与事件,来修改背景颜色、字体颜色、字体大小、动态改变内容等。在这种情况下,推荐使用[Web组件](../../apis-arkweb/ts-basic-components-web.md#web)。
20
21  RichText组件比较消耗内存资源,而且有一些重复使用RichText组件的场景下,比如在List下循环重复使用RichText时,会出现卡顿、滑动响应慢等现象。在这种情况下,推荐使用[RichEditor组件](../arkui-ts/ts-basic-components-richeditor.md#richeditor)。
22
23>  **说明:**
24>
25> - 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
26> - 该组件无法根据内容自适应设置宽高属性,需要开发者设置显示布局。
27
28
29## 子组件
30
31不包含子组件。
32
33## 接口
34
35RichText(content:string)
36
37**系统能力:** SystemCapability.ArkUI.ArkUI.Full
38
39**参数:**
40
41| 参数名 | 类型 | 必填  | 说明 |
42| ------- | -------- | ------------- | -------- |
43| content | string | 是   | 表示HTML格式的字符串。 |
44
45
46## 事件
47
48### onStart
49
50onStart(callback: () => void)
51
52加载网页时触发。
53
54**系统能力:** SystemCapability.ArkUI.ArkUI.Full
55
56### onComplete
57
58onComplete(callback: () => void)
59
60网页加载结束时触发。
61
62**系统能力:** SystemCapability.ArkUI.ArkUI.Full
63
64## 属性
65
66只支持[通用属性](ts-universal-attributes-size.md)中width,height,size,layoutWeight四个属性。由于padding,margin,constraintSize属性使用时与通用属性描述不符,暂不支持。
67
68## 支持标签
69
70| 名称 | 描述 | 示例 |
71| -------- | -------- | -------- |
72| \<h1>--\<h6> | 被用来定义HTML,\<h1>定义重要等级最高的标题,\<h6>定义重要等级最低的标题。 | \<h1>这是一个标题\</h1>\<h2>这是h2标题\</h2> |
73| \<p>\</p> | 定义段落。 | \<p>这是一个段落\</p> |
74| \<br/> | 插入一个简单的换行符。 | \<p>这是一个段落\<br/>这是换行段落\</p> |
75| \<font/> | 规定文本的字体、字体尺寸、字体颜色。在<font/>标签中font size能够设置的值只有1到7的数字,默认值是3,由于<font/>标签在HTML 4.01中不建议使用,在XHTML1.0 Strict DTD中不支持,所以不建议使用此标签,请使用CSS代替。CSS语法:\<p style="font-size: 35px; font-family: verdana; color: rgb(24,78,228)"> | \<font size="3" face="arial" color="red">这是一段红色字体。\</font> |
76| \<hr/> | 定义HTML页面中的主题变化(比如话题的转移),并显示为一条水平线。 | \<p>这个一个段落\</p>\<hr/>\<p>这是一个段落\</p> |
77| \<image>\</image> | 用来定义图片。 | \<image src="resource://rawfile/icon.png">\</image> |
78| \<div>\</div> | 常用于组合块级元素,以便通过CSS来对这些元素进行格式化。 | \<div style='color:#0000FF'>\<h3>这是一个在div元素中的标题。\</h3>\</div> |
79| \<i>\</i> | 定义与文本中其余部分不同的部分,并把这部分文本呈现为斜体文本。 | \<i>这是一个斜体\</i> |
80| \<u>\</u> | 定义与常规文本风格不同的文本,像拼写错误的单词或者汉语中的专有名词,应尽量避免使用\<u>为文本加下划线,用户会把它混淆为一个超链接。 | \<p>\<u>这是带有下划线的段落\</u>\</p> |
81| \<style>\</style> | 定义HTML文档的样式信息。 | \<style>h1{color:red;}p{color:blue;}\</style> |
82| style | 属性规定元素的行内样式,写在标签内部,在使用的时候需用引号来进行区分,并以; 间隔样式,style='width: 500px;height: 500px;border: 1px soild;margin: 0 auto;'。 | \<h1 style='color:blue;text-align:center'>这是一个标题\</h1>\<p style='color:green'>这是一个段落。\</p> |
83| \<script>\</script> | 用于定义客户端脚本,比如JavaScript。 | \<script>document.write("Hello World!")\</script> |
84
85## 示例
86
87示例效果请以真机运行为准,当前DevEco Studio预览器不支持。
88
89```ts
90// xxx.ets
91@Entry
92@Component
93struct RichTextExample {
94  @State data: string = '<h1 style="text-align: center;">h1标题</h1>' +
95  '<h1 style="text-align: center;"><i>h1斜体</i></h1>' +
96  '<h1 style="text-align: center;"><u>h1下划线</u></h1>' +
97  '<h2 style="text-align: center;">h2标题</h2>' +
98  '<h3 style="text-align: center;">h3标题</h3>' +
99  '<p style="text-align: center;">p常规</p><hr/>' +
100  '<div style="width: 500px;height: 500px;border: 1px solid;margin: 0 auto;">' +
101  '<p style="font-size: 35px;text-align: center;font-weight: bold; color: rgb(24,78,228)">字体大小35px,行高45px</p>' +
102  '<p style="background-color: #e5e5e5;line-height: 45px;font-size: 35px;text-indent: 2em;">' +
103  '<p>这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字这是一段文字</p>';
104
105  build() {
106    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center,
107      justifyContent: FlexAlign.Center }) {
108      RichText(this.data)
109        .onStart(() => {
110          console.info('RichText onStart');
111        })
112        .onComplete(() => {
113          console.info('RichText onComplete');
114        })
115        .width(500)
116        .height(500)
117        .backgroundColor(0XBDDB69)
118      RichText('layoutWeight(1)')
119        .onStart(() => {
120          console.info('RichText onStart');
121        })
122        .onComplete(() => {
123          console.info('RichText onComplete');
124        })
125        .size({ width: '100%', height: 110 })
126        .backgroundColor(0X92D6CC)
127        .layoutWeight(1)
128      RichText('layoutWeight(2)')
129        .onStart(() => {
130          console.info('RichText onStart');
131        })
132        .onComplete(() => {
133          console.info('RichText onComplete');
134        })
135        .size({ width: '100%', height: 110 })
136        .backgroundColor(0X92C48D)
137        .layoutWeight(2)
138    }
139  }
140}
141```
142
143 ![richText](figures/richText.png)
144
145