HarmonyOS 鸿蒙Next Text组件如何知道可以展示的文本长度
HarmonyOS 鸿蒙Next Text组件如何知道可以展示的文本长度 Text组件如何知道可以展示的文本长度
可以使用maxLines设置文本的最大行数
或者当大于一定高度或行数的时候显示展开和收起
参考代码:
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组件要确定可以展示的文本长度,通常依赖于组件自身的布局和尺寸限制,以及文本的字体大小、行高等属性。具体实现上,可以通过以下几种方式获取或判断:
-
组件自动换行与截断:Next Text组件会根据设定的宽度自动换行显示文本。如果文本长度超过组件可显示范围,它会自动截断并在末尾显示省略号或其他提示符号。开发者可以通过设置组件的属性来控制这种行为。
-
测量文本尺寸:鸿蒙系统提供了文本测量API,允许开发者在渲染文本前测量其尺寸。通过这些API,开发者可以获取给定文本在当前字体、行高等设置下的实际宽度和高度,从而判断文本是否能在组件内完整显示。
-
监听布局变化:组件的布局变化事件可以反映出文本显示状态的变化。开发者可以通过监听这些事件,动态调整或响应文本长度的变化。
-
使用自定义逻辑:根据具体需求,开发者可以编写自定义逻辑来判断文本长度是否超出组件显示范围,并据此采取相应措施,如显示滚动条、展开/收起按钮等。
如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html