用户3116712
用户3116712
  • 发布:2026-09-07 10:06
  • 更新:2026-09-07 10:06
  • 阅读:12

如何实现多行文本行中省略的效果

分类:鸿蒙Next

问题现象
Text文本多行时,可以利用textOverflow来设置省略效果,但是设置EllipsisMode.CENTER不生效。

效果预览
点击放大

背景知识
根据ellipsisMode使用说明,可以看到EllipsisMode.START和EllipsisMode.CENTER仅在单行超长文本生效,所以文本多行时设置该属性不生效,需要使用其他方式实现。
measureTextSize可以计算超长文本的宽度,利用文本计算可以算出超长文本的首行字符,然后把剩余的文本设置成一行即可使用ellipsisMode属性。
解决方案
首先利用MeasureUtils.measureTextSize算得文本长度(px单位)。
textSize: SizeOptions = this.uiContextMeasure.measureTextSize({
textContent: this.textContent,
fontSize: 16,
});
然后利用vp2px方法可以算得Text组件一行所占宽度(px单位)。
this.textWidthPx = this.getUIContext().vp2px(this.textWidth);
再然后根据公式文本字符数(Text组件一行所占宽度/文本总长度)即可算出一行所占字符数。
this.oneLineLength = this.textContent.length
this.textWidthPx / (this.textSize.width as number);
最后把文本分成两部分,第一个Text组件完整展示一行所占字符,第二个Text组件展示剩余字符,并且设置ellipsisMode效果。
完整示例参考如下:

import { MeasureUtils } from '@kit.ArkUI';

@Entry
@Component
struct MultipleLinesTest {
private textContent: string = '超长的文本在这里展示出来了超长的文本在这里展示出来了超长的文本在这里展示出来了';
uiContextMeasure: MeasureUtils = this.getUIContext().getMeasureUtils();
textSize: SizeOptions = this.uiContextMeasure.measureTextSize({
textContent: this.textContent,
fontSize: 16,
});
// Text组件宽度
private textWidth: number = 200;
private textWidthPx: number = 0;
private oneLineLength: number = 0;

aboutToAppear(): void {
this.textWidthPx = this.getUIContext().vp2px(this.textWidth);
this.oneLineLength = this.textContent.length * this.textWidthPx / (this.textSize.width as number);
}

build() {
Row() {
Column() {
// 计算出来的第一行文本
Text(this.textContent.slice(0, this.oneLineLength))
.width(this.textWidth)
.fontSize(16);
// 除去第一行文本的其他文本
Text(this.textContent.slice(this.oneLineLength, this.textContent.length))
.width(this.textWidth)
.fontSize(16)
.maxLines(1)
.textOverflow({ overflow: TextOverflow.Ellipsis })
.wordBreak(WordBreak.BREAK_ALL)
.ellipsisMode(EllipsisMode.CENTER);
}
.width('100%');
}
.height('100%');
}
}
https://coub.com/view/5v4pyo0v0k
https://coub.com/view/rierf8fjyo
https://coub.com/view/0dhjlm9xm0
https://coub.com/view/izcki9umfp
https://coub.com/view/ogctl14bzy
https://coub.com/view/5iv3mgfo5w
https://coub.com/view/or2itm0r6f
https://coub.com/view/31bcj3aoh9
https://coub.com/view/ka3j9gfp0s
https://coub.com/view/6w3l43cl7b
https://coub.com/view/7ps2t8jww5
https://coub.com/view/xqbzsvnaky
https://coub.com/view/ex4dqcp8ra
https://coub.com/view/3rvua29wz3
https://coub.com/view/vuy1vyht19
https://coub.com/view/h4z41gf4f5
https://coub.com/view/b9j0j12t46
https://coub.com/view/1g1hdexidq
https://coub.com/view/hs7ulipjdo
https://coub.com/view/y9dhmamozu
https://coub.com/view/521iddwwes
https://coub.com/view/i574bcgkim
https://coub.com/view/ss3b5hkg1b
https://coub.com/view/gbpdbrhdlj
https://coub.com/view/xpyqxswiqd
https://coub.com/view/906rc1c852
https://coub.com/view/pkfznr3x92
https://coub.com/view/ud24qdpcfm
https://coub.com/view/v4v85jtyfz
https://coub.com/view/t54aepmoa3
https://coub.com/view/54qvh3fchk
https://coub.com/view/nf0sbfqlrs
https://coub.com/view/ltpgbnenh3
https://coub.com/view/uhe9ku1592
https://coub.com/view/r3jcvscb08
https://coub.com/view/zq0t05lsn1
https://coub.com/view/r35ls78si0
https://coub.com/view/h17w3im0wx
https://coub.com/view/vy1snskqo0
https://coub.com/view/m61gvu0o5m
https://coub.com/view/16yv7fbys1
https://coub.com/view/70uonw64yn
https://coub.com/view/9e54dokt57
https://coub.com/view/xssaqaoc94
https://coub.com/view/1zc6m5fx3q
https://coub.com/view/ei9h7v4d35
https://coub.com/view/84w2f7fl2y
https://coub.com/view/n6k6hiq4ty
https://coub.com/view/rgy7nndubm
https://coub.com/view/0arengtwst
https://coub.com/view/bd9b0wm479
https://coub.com/view/7u8yw80l0s
https://coub.com/view/5xyj48uskd
https://coub.com/view/bqwh5400qo
https://coub.com/view/w0vl2wfxoi
https://coub.com/view/0o77da159j
https://coub.com/view/dvxdh2r3g3
https://coub.com/view/ar0ad94t2j
https://coub.com/view/y10xeqbelx
https://coub.com/view/v0w1bm4jyt
https://coub.com/view/ts4n90inns
https://coub.com/view/6g5ubpxqkp
https://coub.com/view/m5afs183y0
https://coub.com/view/osle10a0bm
https://coub.com/view/xhv7ovwru3
https://coub.com/view/sjh0ih5i0j
https://coub.com/view/0kolygd9ss
https://coub.com/view/hhvsrn818k
https://coub.com/view/edbis9abo6
https://coub.com/view/nf03ydb9t6
https://coub.com/view/qepjqhopxi
https://coub.com/view/jj1vcbqlv3
https://coub.com/view/f5lzvz3anu
https://coub.com/view/5sntc6322p
https://coub.com/view/9xo18kza0i
https://coub.com/view/cegg7pc7zm
https://coub.com/view/0k5no9zjhp
https://coub.com/view/z86vdbazck
https://coub.com/view/m0kmg9wabe

0 关注 分享

要回复文章请先登录注册