鸿蒙应用示例:ArkTS UI框架中的文本缩进技巧

在开发基于HarmonyOS的应用程序时,我们可能会遇到需要对文本进行缩进的需求。本文将通过两个具体的例子来展示如何使用ArkTS UI框架实现这种效果。

方案一:利用获取空格宽度实现缩进

此方案通过测量单个空格的宽度来确定文本前需要添加多少个空格以达到所需的缩进效果。以下是具体的实现代码:

js 复制代码
@Entry
@Component
struct Index {
  @State arr_01: Resource[] = []
  @State arr_02: string[] = ['', '', '', '']
  @State spaceWidth: number = 0 // 单个空格的宽度

  build() {
    Scroll() {
      Column({ space: 10 }) {
        Text('方案一:利用获取空格宽度实现缩进')
        Text(' ').onAreaChange((_oldValue, newValue) => {
          this.spaceWidth = parseFloat('' + newValue.width)
          console.info(`单个空格的宽度为:${this.spaceWidth}px`)
          this.arr_01 = [$r("app.media.icon_0"), $r("app.media.icon_1"), $r("app.media.icon_2"), $r("app.media.icon_3")]
        })
        ForEach(this.arr_01, (icon: Resource, index: number) => {
          Row({ space: 10 }) {
            Image($r('app.media.app_icon'))
              .width('40%')
              .height(80)
              .objectFit(ImageFit.Fill)
              .border({ radius: 10 })
            Stack({ alignContent: Alignment.TopStart }) {
              Text(`${this.arr_02[index]}专升本2021华为开发者联盟欢迎您加入开发者大家庭专升本2021华为开发者联盟欢迎您加入开发者大家庭专升本2021华为开发者联盟欢迎您加入开发者大家庭`)
                .fontSize(16)
                .fontWeight(FontWeight.Bold)
                .maxLines(2)
                .lineHeight(24)
                .textOverflow({ overflow: TextOverflow.Ellipsis })
              Image(icon)
                .height(20)
                .borderRadius(5)
                .onAreaChange((_oldValue, newValue) => {
                  let iconWidth = parseFloat('' + newValue.width)
                  console.info(`缩进开始于索引 ${index}`)
                  console.info(`图标宽度为:${iconWidth}px`)
                  let numSpaces = Math.ceil(iconWidth / this.spaceWidth) + 1
                  console.info(`计算出需要 ${numSpaces} 个空格进行缩进`)
                  this.arr_02[index] = ' '.repeat(numSpaces)
                  console.info(`更新后的缩进字符串为:[${this.arr_02[index]}]`)
                  console.info(`缩进结束于索引 ${index}`)
                })
            }.width('60%')
          }.width('100%')
          .padding({ left: 10, top: 10, right: 20 })
        })
      }
    }.width('100%').height('100%')
  }
}

方案二:利用ContainerSpan实现缩进

此方案使用ContainerSpan来将图像和其他容器嵌入文本流中,从而自然地实现缩进效果。以下是具体的实现代码:

js 复制代码
@Entry
@Component
struct Index {
  @State arr_01: Resource[] = [$r("app.media.icon_0"), $r("app.media.icon_1"), $r("app.media.icon_2"), $r("app.media.icon_3")]

  build() {
    Scroll() {
      Column({ space: 10 }) {
        Text('方案二:利用ContainerSpan实现缩进')
        ForEach(this.arr_01, (icon: Resource, _index: number) => {
          Row({ space: 10 }) {
            Image($r('app.media.app_icon'))
              .width('40%')
              .height(80)
              .objectFit(ImageFit.Fill)
              .border({ radius: 10 })
            Stack({ alignContent: Alignment.TopStart }) {
              Text() {
                ContainerSpan() {
                  ImageSpan(icon)
                    .height(20)
                    .borderRadius(5)
                  Span('专升本2021华为开发者联盟欢迎您加入开发者大家庭专升本2021华为开发者联盟欢迎您加入开发者大家庭专升本2021华为开发者联盟欢迎您加入开发者大家庭')
                    .fontSize(16)
                    .fontWeight(FontWeight.Bold)
                    .lineHeight(24)
                }
              }.maxLines(2)
              .textOverflow({ overflow: TextOverflow.Ellipsis })
            }.width('60%')
          }.width('100%')
          .padding({ left: 10, top: 10, right: 20 })
        })
      }
    }.width('100%').height('100%')
  }
}

结论

以上两种方法都可以实现文本的缩进,但是它们各有优缺点。方案一更加灵活,可以根据实际宽度动态调整缩进;而方案二则更为简洁,适用于不需要频繁变化缩进的情况。开发者应根据具体应用场景选择最适合的方式。

素材

相关推荐
SameX27 分钟前
HarmonyOS Next 安全生态构建与展望
前端·harmonyos
Random_index8 小时前
#Uniapp篇:支持纯血鸿蒙&发布&适配&UIUI
uni-app·harmonyos
鸿蒙自习室12 小时前
鸿蒙多线程开发——线程间数据通信对象02
ui·harmonyos·鸿蒙
SuperHeroWu714 小时前
【HarmonyOS】鸿蒙应用接入微博分享
华为·harmonyos·鸿蒙·微博·微博分享·微博sdk集成·sdk集成
zhangjr057516 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
诗歌难吟4641 天前
初识ArkUI
harmonyos
SameX1 天前
HarmonyOS Next 设备安全特性深度剖析学习
harmonyos
郭梧悠1 天前
HarmonyOS(57) UI性能优化
ui·性能优化·harmonyos
郝晨妤1 天前
鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)
android·ios·华为od·华为·华为云·harmonyos·鸿蒙
Peace*1 天前
HarmonyOs鸿蒙开发实战(16)=>沉浸式效果第一种方案一窗口全屏布局方案
harmonyos·鸿蒙·鸿蒙系统