HarmonyOS 鸿蒙Next Span在一行后面会自动换行,希望自动切换成两行,span不要分开

HarmonyOS 鸿蒙Next Span在一行后面会自动换行,希望自动切换成两行,span不要分开

Span在一行后面会自动换行,希望自动切换成两行,span不要分开

2 回复

import measure from '@ohos.measure';
import display from '@ohos.display';

@Entry
@Component
export struct Index5 {
  @State msg: string =
    '阿萨德考虑好家伙阿萨德了就好了静安寺打回到了家阿萨德了了三大流口水';
  @State msg2: string = `了解详情`;
  @State textWidth: number = display.getDefaultDisplaySync().width - vp2px(60);

  build() {
    NavDestination() {
      Column() {
        TextInput().width('100%')
          .onChange((text) => {
            this.msg = text;
          });
        Row() {
          Text() {
            Span(this.msg).fontColor(Color.Blue).fontSize(14); // fontSize 21px 满一行为630px 126为第二个标签所占的宽度
            if (this.changeLine(this.msg, this.msg2)) {
              Span('\n');
            }
            Span(this.msg2).fontColor(Color.Pink).fontSize(14);
            ImageSpan($r('app.media.app_icon')).width(12);
          }.textAlign(TextAlign.Start).width('100%').padding({ left: 12, right: 12 }).backgroundColor('#ff76a225');
        }.width('100%').padding({ left: 18, right: 18 }).height(200);
      }.width('100%').height('100%').justifyContent(FlexAlign.Center).alignItems(HorizontalAlign.Center);
    }
  }

  changeLine(msg1: string, msg2: string): boolean {
    let i: number = 0;
    let j: number = 0;
    while (j < msg1.length) {
      j++;
      if (this.getTextWidth(msg1.substring(i, j), 14) > this.textWidth) {
        i = j - 1;
      }
    }
    return this.getTextWidth(msg1.substring(i), 14) + this.getTextWidth(msg2, 14) + vp2px(12) > this.textWidth;
  }

  getTextWidth(content: string, fontSize: number): number {
    const width = measure.measureText({ textContent: content, fontSize: fontSize });
    console.error(`getTextWidth: content: ${content}, width: ${width}`);
    return width;
  }
}

更多关于HarmonyOS 鸿蒙Next Span在一行后面会自动换行,希望自动切换成两行,span不要分开的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS中,Next Span 通常是用于文本布局中的一个概念,特别是在处理富文本或自定义文本视图时。如果你希望在特定条件下自动将内容从一行切换到两行,而不拆分当前的 Span,可以考虑以下几种方法:

  1. 使用自定义 Layout:通过重写或扩展现有的文本布局类,控制文本的换行逻辑。可以在测量或绘制阶段判断内容是否需要换行,并据此调整布局。

  2. 插入换行符:在适当的位置插入换行符 \n,强制文本在特定点换行。这种方法虽然简单,但会改变原始文本内容。

  3. 动态调整视图大小:根据内容长度动态调整包含文本的视图大小,利用视图的自动换行属性来实现效果。

  4. 利用 Flexbox 或 Grid 布局:如果文本是在一个容器内显示,可以考虑使用 Flexbox 或 Grid 布局来控制子元素的排列,从而间接控制文本的换行行为。

具体到实现,需要根据你的应用场景和代码架构选择合适的方案。上述方法提供了基本的思路,你可以根据实际情况进行调整。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部