HarmonyOS 文字测量

this.content='一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十一二三四五六七八九十iuyiuyiuy'

//测量整个文案的高度
let titleSize: SizeOptions = MeasureText.measureTextSize({
  textContent: this.content, // 被计算文本内容
  constraintWidth: 868, // 被计算文本布局宽度
  wordBreak: WordBreak.BREAK_WORD,
  fontSize: 13 // 被计算文本字体大小

})

//当前为三行文字的高度
let threeLineSize: SizeOptions = MeasureText.measureTextSize({
  textContent: this.content,
  constraintWidth: 868,
  fontSize: 13,
  wordBreak: WordBreak.BREAK_WORD,
  maxLines: 3  // 被计算文本最大行数
})

Text(this.content)
  .textAlign(TextAlign.Start)
  .width(px2vp(868))
  .fontSize(13)
  .fontColor(this.contentFontColor)
  .wordBreak(WordBreak.BREAK_ALL)

一段中英文字 测量全部文字的高度Number(titleSize.height)和最多三行文字的高度 Number(threeLineSize.height)一样都是48,但是实际上这段文字展示的却是4行

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

可以参考如下Demo:

import curves from '@ohos.curves';
import { display } from '@kit.ArkUI';
import { BusinessError } from '@kit.BasicServicesKit';
import { MeasureText } from '@kit.ArkUI'

@Component
@Preview
@Entry
export struct Index{
  // 长文本
  @State longMessage: string =
    "  我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字。\n" +
      "\n" +
      "  我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字我是段落文字。"
  // 最大显示行数
  @State lines: number = 3;
  // 长文本状态(展开 or 收起)
  @State collapseText: string = '展开全文'
  // 屏幕宽度(单位px)
  screenWidth: number = 0;
  // 是否需要显示"展开"字样(注:当文本长度较短时就不需要“展开”)
  @State isExpanded: boolean = false
  // 测量文本宽度(单位px)
  @State textWidth: number = MeasureText.measureText({
    textContent: this.longMessage,
    fontSize: 15
  })
  // 获取当前所有的display对象
  promise: Promise<Array<display.Display>> = display.getAllDisplays()

  aboutToAppear() {
    console.log(`文本宽度为:${this.textWidth}`)
    this.promise.then((data: Array<display.Display>) => {
      console.log(`所有的屏幕信息:${JSON.stringify(data)}`)
      //单位为像素
      this.screenWidth = data[0]["width"]
      // 屏幕宽度 * 最大行数 * 组件宽度比例 和 文字测量宽度
      this.isExpanded = this.screenWidth * this.lines <= this.textWidth
    }).catch((err: BusinessError) => {
      console.error(`Failed to obtain all the display objects. Code: ${JSON.stringify(err)}`)
    })
  }

  build() {
    Column() {
      if (this.isExpanded) {
        Column() {
          Text(this.longMessage)
            .fontSize(15)
            .fontColor(Color.Black)
            .maxLines(this.lines)
            .textOverflow({ overflow: TextOverflow.Ellipsis })
          Column() {
            Text(this.collapseText)
              .fontSize(15)
              .fontColor(Color.Blue)
              .backgroundColor(Color.White)
          }
          .onClick(() => {
            if (this.collapseText == '展开全文') {
              this.collapseText = '收起';
              // 展开动画
              animateTo({
                duration: 150,
                curve: curves.springMotion(0.5, 0.8),
              }, () => {
                this.lines = -1; // 使得设置的最大行属性无效
              })
            } else {
              this.collapseText = '展开全文';
              // 收起动画
              animateTo({
                duration: 100,
                curve: Curve.Friction,
              }, () => {
                this.lines = 3; // 只显示3行
              })
            }
          })
        }.justifyContent(FlexAlign.Start)
        .alignItems(HorizontalAlign.Start)
      } else {
        Text(this.longMessage)
          .fontSize(15)
          .fontColor(Color.Black)
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .alignItems(HorizontalAlign.Center)
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 文字测量分页处理
114浏览 • 1回复 待解决
HarmonyOS如何测量文本内容的长度?
304浏览 • 0回复 待解决
HarmonyOS如何测量Text组件的宽度呢
556浏览 • 1回复 待解决
如何测量获取控件高宽
923浏览 • 1回复 待解决
基于measure实现的文本测量
919浏览 • 1回复 待解决
measureTextSize的测量参数不清晰
911浏览 • 1回复 待解决
HarmonyOS 文字行高设定后文字不居中
503浏览 • 1回复 待解决
如何保证振弦传感器的测量精度?
3558浏览 • 0回复 待解决
HarmonyOS 计算文字高度
225浏览 • 1回复 待解决
HarmonyOS 多条文字滚动
113浏览 • 1回复 待解决
HarmonyOS 文字fontFamily未生效
208浏览 • 1回复 待解决
HarmonyOS 文字前缀
62浏览 • 1回复 待解决
HarmonyOS 文字显示问题
525浏览 • 1回复 待解决
HarmonyOS 文字转语音无法播报
199浏览 • 1回复 待解决
HarmonyOS 文字背景局部拉伸问题
184浏览 • 1回复 待解决
HarmonyOS如何实现文字轮播效果?
582浏览 • 1回复 待解决
HarmonyOS 图片+文字排列问题
292浏览 • 1回复 待解决
HarmonyOS 弹窗文字未居中
20浏览 • 1回复 待解决