HarmonyOS鸿蒙Next中怎么让文字字数增加后,允许保持单行超出父组件
HarmonyOS鸿蒙Next中怎么让文字字数增加后,允许保持单行超出父组件
在下面例子中,嵌套组件尺寸和类型不能更改,怎么让文字字数增加后,允许保持单行超出List组件,需要文字直接显示,不能走马灯或者clip
List() {
ListItem() {
Text('12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890')
.maxLines(1)
.textOverflow({ overflow: TextOverflow.None })
}
}
.width(100)
更多关于HarmonyOS鸿蒙Next中怎么让文字字数增加后,允许保持单行超出父组件的实战教程也可以访问 https://www.itying.com/category-93-b0.html
建议楼主改变布局吧使用Stack() 或者RelativeContainer()这两种布局来实现突破父组件的限制,相对布局比较容易实现些,基准的容器组件换为最外层的组件,突破内部组件限制
RelativeContainer-行列与堆叠-ArkTS组件-ArkUI(方舟UI框架)-应用框架 - 华为HarmonyOS开发者
更多关于HarmonyOS鸿蒙Next中怎么让文字字数增加后,允许保持单行超出父组件的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
关键问题分析:
-
父组件list需要设置clip(false),意思是子组件内容超出父组件不裁剪
-
需要给text组件动态设置宽度,那么需要计算文字的总长度,代码如下:
@Entry
@Component
export struct CardComponent {
@State textWidth: number = 0;
@State message:string = "12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890";
aboutToAppear(): void {
//重点一:计算文本宽度,从服务器获取到文本之后计算
this.textWidth = this.getUIContext().getMeasureUtils().measureText({
textContent:this.message
})
}
build() {
Column() {
List() {
ListItem() {
Text(this.message)
.maxLines(1).width(1000)
.textOverflow({overflow:TextOverflow.None})
.width(this.textWidth)
}
}.width(100).clip(false)//重点二:子组件超出父组件不裁剪
}
}
}
设置List组件的clip属性为false,允许子组件超出容器范围
List() {
ListItem() {
Text('长文本内容...')
.maxLines(1)
.textOverflow({ overflow: TextOverflow.None })
}
}
.width(100)
.clip(false)
通过constraintSize解除父容器宽度限制:
Text('长文本内容...')
.constraintSize({
maxWidth: Infinity, // 解除最大宽度限制
minWidth: 100 // 保持与List同宽
})
单独给Text文本设置具体的宽度,同时需要搭配祖先组件设置.clip(false),否则祖先组件自动裁剪子组件的宽度。
这确实实现了,可能是我描述过于简略,但是实际用的时候文字是后端给的,可能短可能长,文字有一些背景色之类的样式,如果固定宽度,背景色会不匹配文字长度,怎么解决呢?
想要给Text组件设置具体的宽度可以通过@ohos.measure (文本计算)来得到。
在HarmonyOS Next中,要使文字单行超出父组件显示,可以使用Text组件的textOverflow和maxLines属性。设置maxLines为1,textOverflow为TextOverflow.Ellipsis或TextOverflow.Clip。示例代码:
Text('很长很长的文本内容...')
.maxLines(1)
.textOverflow({overflow: TextOverflow.Ellipsis})
.width(100)
这样设置后,当文字超出100px宽度时会显示省略号。若要去掉省略号直接截断,使用TextOverflow.Clip。父组件需明确设置宽度约束。