鸿蒙Harmony开发:文本样式之属性字符串(StyledString/MutableStyledStrin ...

打印 上一主题 下一主题

主题 825|帖子 825|积分 2475

属性字符串StyledString/MutableStyledString(MutableStyledString继承于StyledString,以下同一简称StyledString)是功能强盛的标记对象,可用于字符或段落级别设置文本样式。通过将StyledString附加到文本组件, 可以通过多种方式更改文本,包罗修改字号、添加字体颜色、使文本可点击以及自定义方式绘制文本等。具体用法可参考StyledString。
属性字符串提供多种类型样式对象,涵盖各种常见的文本样式格式。也可以自行创建CustomSpan, 以应用自定义样式。
创建并应用StyledString和MutableStyledString

可以通过TextController提供的setStyledString(StyledString)方法将属性字符串附加到文本组件,并推荐在onPageShow中触发绑定,在aboutToAppear中调用setStyledString无法实现页面初始即可见属性字符串文本内容,因为aboutToAppear运行时组件还没有完成创建并成功挂载节点树。
  1. @Entry
  2. @Component
  3. struct styled_string_demo1 {
  4.   styledString1: StyledString = new StyledString("运动45分钟");
  5.   mutableStyledString1: MutableStyledString = new MutableStyledString("运动35分钟");
  6.   controller1: TextController = new TextController();
  7.   controller2: TextController = new TextController();
  8.   async onPageShow() {
  9.     this.controller1.setStyledString(this.styledString1)
  10.     this.controller2.setStyledString(this.mutableStyledString1)
  11.   }
  12.   build() {
  13.     Column() {
  14.       // 显示属性字符串
  15.       Text(undefined, { controller: this.controller1 })
  16.       Text(undefined, { controller: this.controller2 })
  17.     }
  18.     .width('100%')
  19.   }
  20. }
复制代码


设置文本样式

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


  • 创建及应用文本字体样式对象(TextStyle)
    1. import { LengthMetrics } from '@kit.ArkUI'
    2. @Entry
    3. @Component
    4. struct styled_string_demo2 {
    5.   textStyleAttrs: TextStyle = new TextStyle({ fontWeight: FontWeight.Bolder, fontSize: LengthMetrics.vp(24), fontStyle: FontStyle.Italic })
    6.   mutableStyledString: MutableStyledString = new MutableStyledString("运动35分钟 目标达成", [
    7.     {
    8.       start: 2,
    9.       length: 2,
    10.       styledKey: StyledStringKey.FONT,
    11.       styledValue: this.textStyleAttrs
    12.     },
    13.     {
    14.       start: 7,
    15.       length: 4,
    16.       styledKey: StyledStringKey.FONT,
    17.       styledValue: new TextStyle({ fontColor: Color.Orange, fontSize: LengthMetrics.vp(12)})
    18.     }
    19.   ]);
    20.   controller: TextController = new TextController();
    21.   async onPageShow() {
    22.     this.controller.setStyledString(this.mutableStyledString)
    23.   }
    24.   build() {
    25.     Column() {
    26.       // 显示属性字符串
    27.       Text(undefined, { controller: this.controller })
    28.         .margin({ top: 10 })
    29.     }
    30.     .width('100%')
    31.   }
    32. }
    复制代码


  • 创建及应用文本阴影对象(TextShadowStyle)
    1. // xxx.ets
    2. @Entry
    3. @Component
    4. struct styled_string_demo3 {
    5.   mutableStyledString: MutableStyledString = new MutableStyledString("运动35分钟", [
    6.   {
    7.     start: 0,
    8.     length: 3,
    9.     styledKey: StyledStringKey.TEXT_SHADOW,
    10.     styledValue: new TextShadowStyle({
    11.       radius: 5,
    12.       type: ShadowType.COLOR,
    13.       color: Color.Red,
    14.       offsetX: 10,
    15.       offsetY: 10
    16.     })
    17.   }
    18.   ]);
    19.   controller: TextController = new TextController();
    20.   async onPageShow() {
    21.     this.controller.setStyledString(this.mutableStyledString)
    22.   }
    23.   build() {
    24.     Column() {
    25.       // 显示属性字符串
    26.       Text(undefined, { controller: this.controller })
    27.     }
    28.     .width('100%')
    29.   }
    30. }
    复制代码


  • 创建及应用文本装饰线对象(DecorationStyle)
    1. // xxx.ets
    2. @Entry
    3. @Component
    4. struct styled_string_demo4 {
    5.   mutableStyledString: MutableStyledString = new MutableStyledString("运动35分钟", [
    6.   {
    7.     start: 0,
    8.     length: 3,
    9.     styledKey: StyledStringKey.DECORATION,
    10.     styledValue: new DecorationStyle({type: TextDecorationType.LineThrough, color: Color.Red})
    11.   }
    12.   ]);
    13.   controller: TextController = new TextController();
    14.   async onPageShow() {
    15.     this.controller.setStyledString(this.mutableStyledString)
    16.   }
    17.   build() {
    18.     Column() {
    19.       // 显示属性字符串
    20.       Text(undefined, { controller: this.controller })
    21.     }
    22.     .width('100%')
    23.   }
    24. }
    复制代码


  • 创建及应用文本基线偏移量对象(BaselineOffsetStyle)
    1. import { LengthMetrics } from '@kit.ArkUI'
    2. import { LengthUnit } from '@ohos.arkui.node'
    3. // xxx.ets
    4. @Entry
    5. @Component
    6. struct styled_string_demo5 {
    7.   mutableStyledString: MutableStyledString = new MutableStyledString("运动35分钟", [
    8.     {
    9.       start: 0,
    10.       length: 3,
    11.       styledKey: StyledStringKey.BASELINE_OFFSET,
    12.       styledValue: new BaselineOffsetStyle(LengthMetrics.px(20))
    13.     }
    14.   ]);
    15.   controller: TextController = new TextController();
    16.   async onPageShow() {
    17.     this.controller.setStyledString(this.mutableStyledString)
    18.   }
    19.   build() {
    20.     Column() {
    21.       // 显示属性字符串
    22.       Text(undefined, { controller: this.controller })
    23.     }
    24.     .width('100%')
    25.   }
    26. }
    复制代码


  • 创建及应用文本行高对象(LineHeightStyle)
    1. import { LengthMetrics } from '@kit.ArkUI'
    2. import { LengthUnit } from '@ohos.arkui.node'
    3. // xxx.ets
    4. @Entry
    5. @Component
    6. struct styled_string_demo6 {
    7.   mutableStyledString: MutableStyledString = new MutableStyledString("运动35分钟\n顶顶顶\n得到", [
    8.     {
    9.       start: 8,
    10.       length: 3,
    11.       styledKey: StyledStringKey.LINE_HEIGHT,
    12.       styledValue: new LineHeightStyle(LengthMetrics.vp(50))
    13.     }
    14.   ]);
    15.   controller: TextController = new TextController();
    16.   async onPageShow() {
    17.     this.controller.setStyledString(this.mutableStyledString)
    18.   }
    19.   build() {
    20.     Column() {
    21.       // 显示属性字符串
    22.       Text(undefined, { controller: this.controller })
    23.     }
    24.     .width('100%')
    25.     .margin({ top: 10 })
    26.   }
    27. }
    复制代码


  • 创建及应用文本字符间距对象(LetterSpacingStyle)
    1. import { LengthMetrics } from '@kit.ArkUI'
    2. import { LengthUnit } from '@ohos.arkui.node'
    3. // xxx.ets
    4. @Entry
    5. @Component
    6. struct styled_string_demo7 {
    7.   mutableStyledString: MutableStyledString = new MutableStyledString("运动35分钟", [
    8.     {
    9.       start: 0,
    10.       length: 2,
    11.       styledKey: StyledStringKey.LETTER_SPACING,
    12.       styledValue: new LetterSpacingStyle(new LengthMetrics(20, LengthUnit.VP))
    13.     }
    14.   ]);
    15.   controller: TextController = new TextController();
    16.   async onPageShow() {
    17.     this.controller.setStyledString(this.mutableStyledString)
    18.   }
    19.   build() {
    20.     Column() {
    21.       // 显示属性字符串
    22.       Text(undefined, { controller: this.controller })
    23.     }
    24.     .width('100%')
    25.   }
    26. }
    复制代码


设置段落样式

可通过ParagraphStyle设置段落样式布局。下图表现了如何分割文本中的段落,段落以换行符 \n 末端。


以下代码示例展示了如何创建 ParagraphStyle 并应用。假如将 ParagraphStyle 附加到段落开头末尾或之间的任何位置均会应用样式,非段落区间内则不会应用样式。
  1. import { LengthMetrics } from '@kit.ArkUI'
  2. titleParagraphStyleAttr: ParagraphStyle = new ParagraphStyle({ textAlign: TextAlign.Center });
  3. //段落首行缩进15vp
  4. paragraphStyleAttr1: ParagraphStyle = new ParagraphStyle({ textIndent: LengthMetrics.vp(15) });
  5. //创建含段落样式的对象paragraphStyledString1
  6. paragraphStyledString1: MutableStyledString = new MutableStyledString("段落标题\n正文第一段落开始0123456789正文第一段落结束。", [
  7.   {
  8.     start: 0,
  9.     length: 4,
  10.     styledKey: StyledStringKey.PARAGRAPH_STYLE,
  11.     styledValue: this.titleParagraphStyleAttr
  12.   },
  13.   {
  14.     start: 0,
  15.     length: 4,
  16.     styledKey: StyledStringKey.LINE_HEIGHT,
  17.     styledValue: new LineHeightStyle(new LengthMetrics(50))
  18.   },{
  19.   start: 0,
  20.   length: 4,
  21.   styledKey: StyledStringKey.FONT,
  22.   styledValue: new TextStyle({ fontSize: LengthMetrics.vp(24), fontWeight: FontWeight.Bolder })
  23. },
  24.   {
  25.     start: 5,
  26.     length: 3,
  27.     styledKey: StyledStringKey.PARAGRAPH_STYLE,
  28.     styledValue: this.paragraphStyleAttr1
  29.   },
  30.   {
  31.     start: 5,
  32.     length: 20,
  33.     styledKey: StyledStringKey.LINE_HEIGHT,
  34.     styledValue: this.lineHeightStyle1
  35.   }
  36. ]);
复制代码
除了可以在创建属性字符串时就预设样式,也可以后续通过replaceStyle清空原样式更换新样式, 同时需要在附加的文本组件controller上主动触发更新绑定的属性字符串。
  1. import { LengthMetrics } from '@kit.ArkUI'
  2. //段落不设置缩进配置最大行数及超长显示方式
  3. paragraphStyleAttr3: ParagraphStyle = new ParagraphStyle({ textAlign: TextAlign.End, maxLines: 1, wordBreak: WordBreak.BREAK_ALL, overflow: TextOverflow.Ellipsis});
  4. // 后续某个节点触发更新段落样式
  5. controller: TextController = new TextController();
  6. this.paragraphStyledString1.replaceStyle({
  7.   start: 5,
  8.   length: 3,
  9.   styledKey: StyledStringKey.PARAGRAPH_STYLE,
  10.   styledValue: this.paragraphStyleAttr3
  11. })
  12. this.controller.setStyledString(this.mutableStyledString3)
复制代码
使用图片

可通过ImageAttachment来添加图片。
以下示例展示了如何将图片和文本附加到同一个MutableStyledString对象上,并实现图文混排。
  1. // xxx.ets
  2. import { image } from '@kit.ImageKit'
  3. import { LengthMetrics } from '@kit.ArkUI'
  4. @Entry
  5. @Component
  6. struct styled_string_demo4 {
  7.   @State message: string = 'Hello World'
  8.   imagePixelMap: image.PixelMap | undefined = undefined
  9.   @State imagePixelMap3: image.PixelMap | undefined = undefined
  10.   mutableStr: MutableStyledString = new MutableStyledString('123');
  11.   controller: TextController = new TextController();
  12.   mutableStr2: MutableStyledString = new MutableStyledString('This is set decoration line style to the mutableStr2', [{
  13.     start: 0,
  14.     length: 15,
  15.     styledKey: StyledStringKey.DECORATION,
  16.     styledValue: new DecorationStyle({
  17.       type: TextDecorationType.Overline,
  18.       color: Color.Orange,
  19.       style: TextDecorationStyle.DOUBLE
  20.     })
  21.   }])
  22.   async aboutToAppear() {
  23.     console.info("aboutToAppear initial imagePixelMap")
  24.     this.imagePixelMap = await this.getPixmapFromMedia($r('app.media.sea'))
  25.   }
  26.   private async getPixmapFromMedia(resource: Resource) {
  27.     let unit8Array = await getContext(this)?.resourceManager?.getMediaContent({
  28.       bundleName: resource.bundleName,
  29.       moduleName: resource.moduleName,
  30.       id: resource.id
  31.     })
  32.     let imageSource = image.createImageSource(unit8Array.buffer.slice(0, unit8Array.buffer.byteLength))
  33.     let createPixelMap: image.PixelMap = await imageSource.createPixelMap({
  34.       desiredPixelFormat: image.PixelMapFormat.RGBA_8888
  35.     })
  36.     await imageSource.release()
  37.     return createPixelMap
  38.   }
  39.   leadingMarginValue: ParagraphStyle = new ParagraphStyle({ leadingMargin: LengthMetrics.vp(5)})
  40.   //行高样式对象
  41.   lineHeightStyle1: LineHeightStyle= new LineHeightStyle(new LengthMetrics(24));
  42.   //Bold样式
  43.   boldTextStyle: TextStyle = new TextStyle({ fontWeight: FontWeight.Bold });
  44.   //创建含段落样式的对象paragraphStyledString1
  45.   paragraphStyledString1: MutableStyledString = new MutableStyledString("\n品牌相纸 高清冲印30张\n限时直降5.15元 限量增送", [
  46.     {
  47.       start: 0,
  48.       length: 28,
  49.       styledKey: StyledStringKey.PARAGRAPH_STYLE,
  50.       styledValue: this.leadingMarginValue
  51.     },
  52.     {
  53.       start: 14,
  54.       length: 9,
  55.       styledKey: StyledStringKey.FONT,
  56.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(14), fontColor: '#B22222' })
  57.     },
  58.     {
  59.       start: 24,
  60.       length: 4,
  61.       styledKey: StyledStringKey.FONT,
  62.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(14), fontWeight: FontWeight.Lighter })
  63.     },
  64.     {
  65.       start: 11,
  66.       length: 4,
  67.       styledKey: StyledStringKey.LINE_HEIGHT,
  68.       styledValue: this.lineHeightStyle1
  69.     }
  70.   ]);
  71.   paragraphStyledString2: MutableStyledString = new MutableStyledString("\n¥16.21 3000+人好评", [
  72.     {
  73.       start: 0,
  74.       length: 5,
  75.       styledKey: StyledStringKey.PARAGRAPH_STYLE,
  76.       styledValue: this.leadingMarginValue
  77.     },
  78.     {
  79.       start: 0,
  80.       length: 4,
  81.       styledKey: StyledStringKey.LINE_HEIGHT,
  82.       styledValue: new LineHeightStyle(new LengthMetrics(60))
  83.     },
  84.     {
  85.       start: 0,
  86.       length: 7,
  87.       styledKey: StyledStringKey.FONT,
  88.       styledValue: this.boldTextStyle
  89.     },
  90.     {
  91.       start: 1,
  92.       length: 1,
  93.       styledKey: StyledStringKey.FONT,
  94.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(18) })
  95.     },
  96.     {
  97.       start: 2,
  98.       length: 2,
  99.       styledKey: StyledStringKey.FONT,
  100.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(36) })
  101.     },
  102.     {
  103.       start: 4,
  104.       length: 3,
  105.       styledKey: StyledStringKey.FONT,
  106.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(20) })
  107.     },
  108.     {
  109.       start: 7,
  110.       length: 9,
  111.       styledKey: StyledStringKey.FONT,
  112.       styledValue: new TextStyle({ fontColor: Color.Grey, fontSize: LengthMetrics.vp(14)})
  113.     }
  114.   ])
  115.   build() {
  116.     Row() {
  117.       Column({ space: 10 }) {
  118.         Text(undefined, { controller: this.controller })
  119.           .copyOption(CopyOptions.InApp)
  120.           .draggable(true)
  121.           .backgroundColor('#FFFFFF')
  122.           .borderRadius(5)
  123.         Button('点击查看商品卡片')
  124.           .onClick(() => {
  125.             if (this.imagePixelMap !== undefined) {
  126.               this.mutableStr = new MutableStyledString(new ImageAttachment({
  127.                 value: this.imagePixelMap,
  128.                 size: { width: 180, height: 160 },
  129.                 verticalAlign: ImageSpanAlignment.BASELINE,
  130.                 objectFit: ImageFit.Fill
  131.               }))
  132.               this.paragraphStyledString1.appendStyledString(this.paragraphStyledString2)
  133.               this.mutableStr.appendStyledString(this.paragraphStyledString1)
  134.               this.controller.setStyledString(this.mutableStr)
  135.             }
  136.           })
  137.       }
  138.       .width('100%')
  139.     }
  140.     .height('100%')
  141.     .backgroundColor('#F8F8FF')
  142.   }
  143. }
复制代码


设置变乱

可通过GestureStyle设置onClick、onLongPress变乱来使文本响应点击长按变乱。
除了初始化属性字符串对象即初始样式对象,亦可通过setStyle接口再叠加新样式或更新已有样式,同时需要在附加的文本组件controller上主动触发更新绑定的属性字符串。
  1. import { drawing } from '@kit.ArkGraphics2D';
  2. class MyCustomSpan extends CustomSpan {
  3. constructor(word: string, width: number, height: number, fontSize: number) {
  4.   super();
  5.   this.word = word;
  6.   this.width = width;
  7.   this.height = height;
  8.   this.fontSize = fontSize;
  9. }
  10. onMeasure(measureInfo: CustomSpanMeasureInfo): CustomSpanMetrics {
  11.   return { width: this.width, height: this.height }
  12. }
  13. onDraw(context: DrawContext, options: CustomSpanDrawInfo) {
  14.   let canvas = context.canvas;
  15.   const brush = new drawing.Brush();
  16.   brush.setColor({ alpha: 255, red: 0, green: 0, blue: 0 })
  17.   const font = new drawing.Font()
  18.   font.setSize(vp2px(this.fontSize))
  19.   const textBlob = drawing.TextBlob.makeFromString(this.word.substr(0, 5), font, drawing.TextEncoding.TEXT_ENCODING_UTF8)
  20.   canvas.attachBrush(brush)
  21.   this.onDrawRectByRadius(context, options.x, options.x + vp2px(this.width), options.lineTop, options.lineBottom, 20)
  22.   brush.setColor({ alpha: 255, red: 255, green: 255, blue: 255 })
  23.   canvas.attachBrush(brush)
  24.   canvas.drawTextBlob(textBlob, options.x, options.lineBottom - 30)
  25.   brush.setColor({ alpha: 255, red: 255, green: 228 , blue: 196 })
  26.   canvas.attachBrush(brush)
  27.   const textBlob1 = drawing.TextBlob.makeFromString(this.word.substr(5), font, drawing.TextEncoding.TEXT_ENCODING_UTF8)
  28.   canvas.drawTextBlob(textBlob1, options.x + vp2px(100), options.lineBottom - 30)
  29.   canvas.detachBrush()
  30. }
  31. onDrawRectByRadius(context: DrawContext, left: number, right: number, top: number, bottom: number, radius: number) {
  32.   let canvas = context.canvas
  33.   let path = new drawing.Path()
  34.   // 画带radius的rect
  35.   path.moveTo(left  + radius, top)
  36.   path.lineTo(right - radius, top)
  37.   path.arcTo(right - 2 * radius, top, right, top + 2 * radius, 270, 90)
  38.   path.lineTo(right, bottom - radius)
  39.   path.arcTo(right - 2 * radius, bottom - 2 * radius, right, bottom, 0, 90)
  40.   path.lineTo(left + 2 * radius, bottom)
  41.   path.arcTo(left, bottom - 2 * radius, left + 2 * radius, bottom, 90, 90)
  42.   path.lineTo(left, top + 2 * radius)
  43.   path.arcTo(left, top, left + 2 * radius, top + 2 * radius, 180, 90)
  44.   canvas.drawPath(path)
  45. }
  46. setWord(word: string) {
  47.   this.word = word;
  48. }
  49. width: number = 160
  50. word: string = "drawing"
  51. height: number = 10
  52. fontSize: number = 16
  53. }
  54. @Entry
  55. @Component
  56. struct styled_string_demo6 {
  57. customSpan3: MyCustomSpan = new MyCustomSpan("99VIP88%off", 200, 40, 30)
  58. textStyle: MutableStyledString = new MutableStyledString("123");
  59. textController: TextController = new TextController()
  60. isPageShow: boolean = true
  61. async onPageShow() {
  62.   if (!this.isPageShow) {
  63.     return
  64.   }
  65.   this.isPageShow = false
  66.   this.textController.setStyledString(new StyledString(this.customSpan3))
  67. }
  68. build() {
  69.   Row() {
  70.     Column() {
  71.       Text(undefined, { controller: this.textController })
  72.         .copyOption(CopyOptions.InApp)
  73.         .fontSize(30)
  74.     }
  75.     .width('100%')
  76.   }
  77.   .height('100%')
  78. }
  79. }
复制代码


场景示例

  1. import { LengthMetrics } from '@kit.ArkUI';
  2. @Entry
  3. @Component
  4. struct Index {
  5.   alignCenterParagraphStyleAttr: ParagraphStyle = new ParagraphStyle({ textAlign: TextAlign.Center });
  6.   //行高样式对象
  7.   lineHeightStyle1: LineHeightStyle= new LineHeightStyle(LengthMetrics.vp(24));
  8.   //Bold样式
  9.   boldTextStyle: TextStyle = new TextStyle({ fontWeight: FontWeight.Bold });
  10.   //创建含段落样式的对象paragraphStyledString1
  11.   paragraphStyledString1: MutableStyledString = new MutableStyledString("您的豪华钻石已过期1天\n续费可继续享受会员专属权益", [
  12.     {
  13.       start: 0,
  14.       length: 4,
  15.       styledKey: StyledStringKey.PARAGRAPH_STYLE,
  16.       styledValue: this.alignCenterParagraphStyleAttr
  17.     },
  18.     {
  19.       start: 0,
  20.       length: 4,
  21.       styledKey: StyledStringKey.LINE_HEIGHT,
  22.       styledValue: new LineHeightStyle(LengthMetrics.vp(40))
  23.     },
  24.     {
  25.       start: 11,
  26.       length: 14,
  27.       styledKey: StyledStringKey.FONT,
  28.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(14), fontColor: Color.Grey })
  29.     },
  30.     {
  31.       start: 11,
  32.       length: 4,
  33.       styledKey: StyledStringKey.PARAGRAPH_STYLE,
  34.       styledValue: this.alignCenterParagraphStyleAttr
  35.     },
  36.     {
  37.       start: 11,
  38.       length: 4,
  39.       styledKey: StyledStringKey.LINE_HEIGHT,
  40.       styledValue: this.lineHeightStyle1
  41.     }
  42.   ]);
  43.   paragraphStyledString2: MutableStyledString = new MutableStyledString("\n¥4.88¥15", [
  44.     {
  45.       start: 0,
  46.       length: 4,
  47.       styledKey: StyledStringKey.PARAGRAPH_STYLE,
  48.       styledValue: this.alignCenterParagraphStyleAttr
  49.     },
  50.     {
  51.       start: 0,
  52.       length: 4,
  53.       styledKey: StyledStringKey.LINE_HEIGHT,
  54.       styledValue: new LineHeightStyle(LengthMetrics.vp(60))
  55.     },
  56.     {
  57.       start: 0,
  58.       length: 6,
  59.       styledKey: StyledStringKey.FONT,
  60.       styledValue: this.boldTextStyle
  61.     },
  62.     {
  63.       start: 1,
  64.       length: 1,
  65.       styledKey: StyledStringKey.FONT,
  66.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(18)})
  67.     },
  68.     {
  69.       start: 2,
  70.       length: 4,
  71.       styledKey: StyledStringKey.FONT,
  72.       styledValue: new TextStyle({ fontSize: LengthMetrics.vp(40)})
  73.     },
  74.     {
  75.       start: 6,
  76.       length: 3,
  77.       styledKey: StyledStringKey.FONT,
  78.       styledValue: new TextStyle({ fontColor: Color.Grey, fontSize: LengthMetrics.vp(14)})
  79.     },
  80.     {
  81.       start: 6,
  82.       length: 3,
  83.       styledKey: StyledStringKey.DECORATION,
  84.       styledValue: new DecorationStyle({ type: TextDecorationType.LineThrough, color: Color.Grey })
  85.     }
  86.   ])
  87.   paragraphStyledString3: MutableStyledString = new MutableStyledString("\n02时06分后将失去该优惠", [
  88.     {
  89.       start: 0,
  90.       length: 4,
  91.       styledKey: StyledStringKey.PARAGRAPH_STYLE,
  92.       styledValue: this.alignCenterParagraphStyleAttr
  93.     },
  94.     {
  95.       start: 0,
  96.       length: 4,
  97.       styledKey: StyledStringKey.LINE_HEIGHT,
  98.       styledValue: new LineHeightStyle(LengthMetrics.vp(30))
  99.     },
  100.     {
  101.       start: 1,
  102.       length: 2,
  103.       styledKey: StyledStringKey.FONT,
  104.       styledValue: new TextStyle({ fontColor: '#FFD700', fontWeight: FontWeight.Bold })
  105.     },
  106.     {
  107.       start: 4,
  108.       length: 2,
  109.       styledKey: StyledStringKey.FONT,
  110.       styledValue: new TextStyle({ fontColor: '#FFD700', fontWeight: FontWeight.Bold })
  111.     }
  112.   ])
  113.   controller: TextController = new TextController();
  114.   build() {
  115.     Row() {
  116.       Column( { space : 5 }) {
  117.         Text(undefined, { controller: this.controller })
  118.           .width(240)
  119.           .copyOption(CopyOptions.InApp)
  120.           .draggable(true)
  121.           .onAppear(()=>{
  122.             this.paragraphStyledString2.appendStyledString(this.paragraphStyledString3)
  123.             this.paragraphStyledString1.appendStyledString(this.paragraphStyledString2)
  124.             this.controller.setStyledString(this.paragraphStyledString1)
  125.           })
  126.         Button("限时4.88元 立即续费")
  127.           .width(200)
  128.           .fontColor(Color.White)
  129.           .fontSize(18)
  130.           .backgroundColor('#3CB371')
  131.           .margin({ bottom: 10 })
  132.       }
  133.       .borderWidth(1).borderColor('#FFDEAD')
  134.       .margin({ left: 10 })
  135.     }
  136.     .height('60%')
  137.   }
  138. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

愛在花開的季節

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表