1# 文本显示 2 3 4Text是文本组件,通常用于展示用户的视图,如显示文章的文字。具体用法可参考[Text](../reference/arkui-ts/ts-basic-components-text.md)。 5 6 7## 创建文本 8 9Text可通过以下两种方式来创建: 10 11 12- string字符串 13 14 ```ts 15 Text('我是一段文本') 16 ``` 17 18 19![zh-cn_image_0000001563060685](figures/zh-cn_image_0000001563060685.png) 20 21 22- 引用Resource资源 23 资源引用类型可以通过$r创建Resource类型对象,文件位置为/resources/base/element/string.json。 24 25 26 ```ts 27 Text($r('app.string.module_desc')) 28 .baselineOffset(0) 29 .fontSize(30) 30 .border({ width: 1 }) 31 .padding(10) 32 .width(300) 33 ``` 34 35 ![zh-cn_image_0000001511580872](figures/zh-cn_image_0000001511580872.png) 36 37 38## 添加子组件 39 40[Span](../reference/arkui-ts/ts-basic-components-span.md)只能作为Text组件的子组件显示文本内容。可以在一个Text内添加多个Span来显示一段信息,例如产品说明书、承诺书等。 41 42- 创建Span。 43 Span组件需要写到Text组件内,单独写Span组件不会显示信息,Text与Span同时配置文本内容内容时,Span内容覆盖Text内容。 44 45 46 ```ts 47 Text('我是Text') { 48 Span('我是Span') 49 } 50 .padding(10) 51 .borderWidth(1) 52 ``` 53 54 ![zh-cn_image_0000001562700441](figures/zh-cn_image_0000001562700441.png) 55 56- 设置文本装饰线及颜色。 57 通过decoration设置文本装饰线及颜色。 58 59 60 ```ts 61 Text() { 62 Span('我是Span1,').fontSize(16).fontColor(Color.Grey) 63 .decoration({ type: TextDecorationType.LineThrough, color: Color.Red }) 64 Span('我是Span2').fontColor(Color.Blue).fontSize(16) 65 .fontStyle(FontStyle.Italic) 66 .decoration({ type: TextDecorationType.Underline, color: Color.Black }) 67 Span(',我是Span3').fontSize(16).fontColor(Color.Grey) 68 .decoration({ type: TextDecorationType.Overline, color: Color.Green }) 69 } 70 .borderWidth(1) 71 .padding(10) 72 ``` 73 74 ![zh-cn_image_0000001562700437](figures/zh-cn_image_0000001562700437.png) 75 76- 通过textCase设置文字一直保持大写或者小写状态。 77 78 ```ts 79 Text() { 80 Span('I am Upper-span').fontSize(12) 81 .textCase(TextCase.UpperCase) 82 } 83 .borderWidth(1) 84 .padding(10) 85 ``` 86 87 ![zh-cn_image_0000001562940525](figures/zh-cn_image_0000001562940525.png) 88 89- 添加事件。 90 由于Span组件无尺寸信息,事件仅支持点击事件onClick。 91 92 93 ```ts 94 Text() { 95 Span('I am Upper-span').fontSize(12) 96 .textCase(TextCase.UpperCase) 97 .onClick(()=>{ 98 console.info('我是Span——onClick') 99 }) 100 } 101 ``` 102 103 104## 自定义文本样式 105 106- 通过textAlign属性设置文本对齐样式。 107 108 ```ts 109 Text('左对齐') 110 .width(300) 111 .textAlign(TextAlign.Start) 112 .border({ width: 1 }) 113 .padding(10) 114 Text('中间对齐') 115 .width(300) 116 .textAlign(TextAlign.Center) 117 .border({ width: 1 }) 118 .padding(10) 119 Text('右对齐') 120 .width(300) 121 .textAlign(TextAlign.End) 122 .border({ width: 1 }) 123 .padding(10) 124 ``` 125 126 ![zh-cn_image_0000001511421260](figures/zh-cn_image_0000001511421260.png) 127 128- 通过textOverflow属性控制文本超长处理,textOverflow需配合maxLines一起使用(默认情况下文本自动折行)。 129 130 ```ts 131 Text('This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content. This is the setting of textOverflow to Clip text content This is the setting of textOverflow to None text content.') 132 .width(250) 133 .textOverflow({ overflow: TextOverflow.None }) 134 .maxLines(1) 135 .fontSize(12) 136 .border({ width: 1 }).padding(10) 137 Text('我是超长文本,超出的部分显示省略号。I am an extra long text, with ellipses displayed for any excess。') 138 .width(250) 139 .textOverflow({ overflow: TextOverflow.Ellipsis }) 140 .maxLines(1) 141 .fontSize(12) 142 .border({ width: 1 }).padding(10) 143 ``` 144 145 ![zh-cn_image_0000001563060693](figures/zh-cn_image_0000001563060693.png) 146 147 ![zh-cn_image_0000001563060701](figures/zh-cn_image_0000001563060701.png) 148 149- 通过lineHeight属性设置文本行高。 150 151 ```ts 152 Text('This is the text with the line height set. This is the text with the line height set.') 153 .width(300).fontSize(12).border({ width: 1 }).padding(10) 154 Text('This is the text with the line height set. This is the text with the line height set.') 155 .width(300).fontSize(12).border({ width: 1 }).padding(10) 156 .lineHeight(20) 157 ``` 158 159 ![zh-cn_image_0000001511740480](figures/zh-cn_image_0000001511740480.png) 160 161- 通过decoration属性设置文本装饰线样式及其颜色。 162 163 ```ts 164 Text('This is the text') 165 .decoration({ 166 type: TextDecorationType.LineThrough, 167 color: Color.Red 168 }) 169 .borderWidth(1).padding(10).margin(5) 170 Text('This is the text') 171 .decoration({ 172 type: TextDecorationType.Overline, 173 color: Color.Red 174 }) 175 .borderWidth(1).padding(10).margin(5) 176 Text('This is the text') 177 .decoration({ 178 type: TextDecorationType.Underline, 179 color: Color.Red 180 }) 181 .borderWidth(1).padding(10).margin(5) 182 ``` 183 184 ![zh-cn_image_0000001511580888](figures/zh-cn_image_0000001511580888.png) 185 186- 通过baselineOffset属性设置文本基线的偏移量。 187 188 ```ts 189 Text('This is the text content with baselineOffset 0.') 190 .baselineOffset(0) 191 .fontSize(12) 192 .border({ width: 1 }) 193 .padding(10) 194 .width('100%') 195 .margin(5) 196 Text('This is the text content with baselineOffset 30.') 197 .baselineOffset(30) 198 .fontSize(12) 199 .border({ width: 1 }) 200 .padding(10) 201 .width('100%') 202 .margin(5) 203 204 Text('This is the text content with baselineOffset -20.') 205 .baselineOffset(-20) 206 .fontSize(12) 207 .border({ width: 1 }) 208 .padding(10) 209 .width('100%') 210 .margin(5) 211 ``` 212 213 ![zh-cn_image_0000001562820789](figures/zh-cn_image_0000001562820789.png) 214 215- 通过letterSpacing属性设置文本字符间距。 216 217 ```ts 218 Text('This is the text content with letterSpacing 0.') 219 .letterSpacing(0) 220 .fontSize(12) 221 .border({ width: 1 }) 222 .padding(10) 223 .width('100%') 224 .margin(5) 225 Text('This is the text content with letterSpacing 3.') 226 .letterSpacing(3) 227 .fontSize(12) 228 .border({ width: 1 }) 229 .padding(10) 230 .width('100%') 231 .margin(5) 232 Text('This is the text content with letterSpacing -1.') 233 .letterSpacing(-1) 234 .fontSize(12) 235 .border({ width: 1 }) 236 .padding(10) 237 .width('100%') 238 .margin(5) 239 ``` 240 241 ![zh-cn_image_0000001562940513](figures/zh-cn_image_0000001562940513.png) 242 243- 通过minFontSize与maxFontSize自适应字体大小,minFontSize设置文本最小显示字号,maxFontSize设置文本最大显示字号,minFontSize与maxFontSize必须搭配同时使用,以及需配合maxline或布局大小限制一起使用,单独设置不生效。 244 245 ```ts 246 Text('我的最大字号为30,最小字号为5,宽度为250,maxLines为1') 247 .width(250) 248 .maxLines(1) 249 .maxFontSize(30) 250 .minFontSize(5) 251 .border({ width: 1 }) 252 .padding(10) 253 .margin(5) 254 Text('我的最大字号为30,最小字号为5,宽度为250,maxLines为2') 255 .width(250) 256 .maxLines(2) 257 .maxFontSize(30) 258 .minFontSize(5) 259 .border({ width: 1 }) 260 .padding(10) 261 .margin(5) 262 Text('我的最大字号为30,最小字号为15,宽度为250,高度为50') 263 .width(250) 264 .height(50) 265 .maxFontSize(30) 266 .minFontSize(15) 267 .border({ width: 1 }) 268 .padding(10) 269 .margin(5) 270 Text('我的最大字号为30,最小字号为15,宽度为250,高度为100') 271 .width(250) 272 .height(100) 273 .maxFontSize(30) 274 .minFontSize(15) 275 .border({ width: 1 }) 276 .padding(10) 277 .margin(5) 278 ``` 279 280 ![zh-cn_image_0000001511740472](figures/zh-cn_image_0000001511740472.png) 281 282- 通过textCase属性设置文本大小写。 283 284 ```ts 285 Text('This is the text content with textCase set to Normal.') 286 .textCase(TextCase.Normal) 287 .padding(10) 288 .border({ width: 1 }) 289 .padding(10) 290 .margin(5) 291 292 // 文本全小写展示 293 Text('This is the text content with textCase set to LowerCase.') 294 .textCase(TextCase.LowerCase) 295 .border({ width: 1 }) 296 .padding(10) 297 .margin(5) 298 299 // 文本全大写展示 300 Text('This is the text content with textCase set to UpperCase.') 301 .textCase(TextCase.UpperCase) 302 .border({ width: 1 }) 303 .padding(10) 304 .margin(5) 305 ``` 306 307 ![zh-cn_image_0000001562940529](figures/zh-cn_image_0000001562940529.png) 308 309- 通过copyOption属性设置文本是否可复制粘贴。 310 311 ```ts 312 Text("这是一段可复制文本") 313 .fontSize(30) 314 .copyOption(CopyOptions.InApp) 315 ``` 316 317 ![zh-cn_image_0000001511580868](figures/zh-cn_image_0000001511580868.png) 318 319 320## 添加事件 321 322Text组件可以添加通用事件,可以绑定onClick、onTouch等事件来响应操作。 323 324 325```ts 326Text('点我') 327 .onClick(()=>{ 328 console.info('我是Text的点击响应事件'); 329 }) 330``` 331 332 333## 场景示例 334 335 336```ts 337// xxx.ets 338@Entry 339@Component 340struct TextExample { 341 build() { 342 Column() { 343 Row() { 344 Text("1").fontSize(14).fontColor(Color.Red).margin({ left: 10, right: 10 }) 345 Text("我是热搜词条1") 346 .fontSize(12) 347 .fontColor(Color.Blue) 348 .maxLines(1) 349 .textOverflow({ overflow: TextOverflow.Ellipsis }) 350 .fontWeight(300) 351 Text("爆") 352 .margin({ left: 6 }) 353 .textAlign(TextAlign.Center) 354 .fontSize(10) 355 .fontColor(Color.White) 356 .fontWeight(600) 357 .backgroundColor(0x770100) 358 .borderRadius(5) 359 .width(15) 360 .height(14) 361 }.width('100%').margin(5) 362 363 Row() { 364 Text("2").fontSize(14).fontColor(Color.Red).margin({ left: 10, right: 10 }) 365 Text("我是热搜词条2 我是热搜词条2 我是热搜词条2 我是热搜词条2 我是热搜词条2") 366 .fontSize(12) 367 .fontColor(Color.Blue) 368 .fontWeight(300) 369 .constraintSize({ maxWidth: 200 }) 370 .maxLines(1) 371 .textOverflow({ overflow: TextOverflow.Ellipsis }) 372 Text("热") 373 .margin({ left: 6 }) 374 .textAlign(TextAlign.Center) 375 .fontSize(10) 376 .fontColor(Color.White) 377 .fontWeight(600) 378 .backgroundColor(0xCC5500) 379 .borderRadius(5) 380 .width(15) 381 .height(14) 382 }.width('100%').margin(5) 383 384 Row() { 385 Text("3").fontSize(14).fontColor(Color.Orange).margin({ left: 10, right: 10 }) 386 Text("我是热搜词条3") 387 .fontSize(12) 388 .fontColor(Color.Blue) 389 .fontWeight(300) 390 .maxLines(1) 391 .constraintSize({ maxWidth: 200 }) 392 .textOverflow({ overflow: TextOverflow.Ellipsis }) 393 Text("热") 394 .margin({ left: 6 }) 395 .textAlign(TextAlign.Center) 396 .fontSize(10) 397 .fontColor(Color.White) 398 .fontWeight(600) 399 .backgroundColor(0xCC5500) 400 .borderRadius(5) 401 .width(15) 402 .height(14) 403 }.width('100%').margin(5) 404 405 Row() { 406 Text("4").fontSize(14).fontColor(Color.Grey).margin({ left: 10, right: 10 }) 407 Text("我是热搜词条4 我是热搜词条4 我是热搜词条4 我是热搜词条4 我是热搜词条4") 408 .fontSize(12) 409 .fontColor(Color.Blue) 410 .fontWeight(300) 411 .constraintSize({ maxWidth: 200 }) 412 .maxLines(1) 413 .textOverflow({ overflow: TextOverflow.Ellipsis }) 414 }.width('100%').margin(5) 415 }.width('100%') 416 } 417} 418 419``` 420 421![zh-cn_image_0000001562820805](figures/zh-cn_image_0000001562820805.png) 422