鸿蒙应用示例: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%')
  }
}

结论

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

素材

相关推荐
不肥嘟嘟右卫门7 小时前
鸿蒙原生ArkTS布局方式之Popup+TextInput提示输入布局深度解析
华为·harmonyos
nullregedit8 小时前
原生鸿蒙像素画板实战 22:快捷键与鼠标交互
harmonyos·arkts·鸿蒙·bitart·像素画
●VON9 小时前
鸿蒙 PC Markdown 编辑器图片粘贴:从系统剪贴板到标准相对链接
华为·编辑器·harmonyos·鸿蒙
●VON9 小时前
鸿蒙 PC Markdown 编辑器外部修改检测:从文件指纹到冲突决策
华为·编辑器·harmonyos·鸿蒙
●VON9 小时前
鸿蒙 PC Markdown 编辑器十兆级大文档保护模式
华为·编辑器·harmonyos·鸿蒙
●VON10 小时前
鸿蒙 PC Markdown 编辑器三方冲突处理:本地缓冲区、磁盘版本与共同基线
网络·华为·编辑器·harmonyos·鸿蒙
listening77710 小时前
HarmonyOS 6.1 性能极致调优:从“流畅”到“极致”的SmartPerf深度剖析
华为·harmonyos
轻口味10 小时前
【大展鸿图】HarmonyOS DevEco Code 入门与最佳实
华为·harmonyos·鸿蒙·月更
●VON10 小时前
鸿蒙 PC Markdown 编辑器搜索选项响应式布局:220 vp 侧栏中的完整中文控件
服务器·华为·编辑器·harmonyos·鸿蒙
MonkeyKing715510 小时前
鸿蒙ArkTS Image组件全解:本地/网络渲染、缩放裁剪、实战避坑
harmonyos·鸿蒙