HarmonyOS 鸿蒙Next Text组件如何知道可以展示的文本长度

发布于 1周前 作者 nodeper 来自 鸿蒙OS

HarmonyOS 鸿蒙Next Text组件如何知道可以展示的文本长度 Text组件如何知道可以展示的文本长度

2 回复

可以使用maxLines设置文本的最大行数

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-basic-components-text-V5#textalign

或者当大于一定高度或行数的时候显示展开和收起

参考代码:

import inspector from '@ohos.arkui.inspector';
import componentUtils from '@ohos.arkui.componentUtils';
import measure from '@ohos.measure'

@Entry
@Component
export struct TextButton {
  @State content: string = '#限定的校服,限定的青春!那群陪你度过青涩阳光的人,你还记得他们吗?12月15日中午12点,一起来重拾回忆'
  @State maxLines: number = Infinity
  @State isCollapse: boolean = true; // true收起 false展开
  @State collapseTxt: string = '…[展开]';
  private subTxt: string = '';
  @State flag: boolean = false; // 是否需要展开收起

  build() {
    Row() {
      Column() {
        Text() {
          if (this.flag) {
            Span(this.collapseTxt)
              .onClick(() => {
                if (this.isCollapse) {
                  this.maxLines = Infinity;
                  this.content = this.measureText;
                  this.isCollapse = false;
                  this.collapseTxt = '[收起]';
                } else {
                  this.isCollapse = true;
                  this.collapseTxt = '…[展开]';
                  this.content = this.subTxt;
                }
              })
          }
        }
        .textOverflow({ overflow: TextOverflow.Ellipsis })
        .maxLines(this.maxLines)
        .fontSize(24)
        .width(300)
        .backgroundColor(Color.White)
        .key('txt_info')
      }
      .width('100%')
    }
    .height('100%')
  }

  listener: inspector.ComponentObserver = inspector.createComponentObserver('txt_info')
  aboutToAppear() {
    let onLayoutComplete: () => void = (): void => {
      if (this.isCollapse) {
        this.getComponentRect('txt_info');
      }
    }
    let onDrawComplete: () => void = (): void => {
      if (this.isCollapse) {
        this.subTxt = this.content;
      }
    }
    let FuncLayout = onLayoutComplete
    let FuncDraw = onDrawComplete
    this.listener.on('layout', FuncLayout)
    this.listener.on('draw', FuncDraw)
  }

  private getComponentRect(key: string) {
    let modePosition = componentUtils.getRectangleById(key);
    let localOffsetHeight = modePosition.size.height;
    const textSize: SizeOptions =
      measure.measureTextSize({ textContent: this.content, fontSize: 24, constraintWidth: 300 })
    const textSize2: SizeOptions = measure.measureTextSize({
      textContent: this.content,
      fontSize: 24,
      maxLines: 3,
      constraintWidth: 300
    })
    if ((textSize.height || 0) > (textSize2.height || 0)) {
      this.flag = true;
    }
    console.info(`localOffsetHeight ${localOffsetHeight} textSize${textSize.height} textSize2 ${textSize2.height}`)
    if (localOffsetHeight > (textSize2.height || 300)) {
      this.content = this.content.substring(0, this.content.length - 2);
      this.isCollapse = true;
    }
  }
}

更多关于HarmonyOS 鸿蒙Next Text组件如何知道可以展示的文本长度的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,Next Text组件要确定可以展示的文本长度,通常依赖于组件自身的布局和尺寸限制,以及文本的字体大小、行高等属性。具体实现上,可以通过以下几种方式获取或判断:

  1. 组件自动换行与截断:Next Text组件会根据设定的宽度自动换行显示文本。如果文本长度超过组件可显示范围,它会自动截断并在末尾显示省略号或其他提示符号。开发者可以通过设置组件的属性来控制这种行为。

  2. 测量文本尺寸:鸿蒙系统提供了文本测量API,允许开发者在渲染文本前测量其尺寸。通过这些API,开发者可以获取给定文本在当前字体、行高等设置下的实际宽度和高度,从而判断文本是否能在组件内完整显示。

  3. 监听布局变化:组件的布局变化事件可以反映出文本显示状态的变化。开发者可以通过监听这些事件,动态调整或响应文本长度的变化。

  4. 使用自定义逻辑:根据具体需求,开发者可以编写自定义逻辑来判断文本长度是否超出组件显示范围,并据此采取相应措施,如显示滚动条、展开/收起按钮等。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部