HarmonyOS 鸿蒙Next中Text组件小语种换行显示重叠

HarmonyOS 鸿蒙Next中Text组件小语种换行显示重叠 我在穿戴开发应用的时候出现部分小语种情况下(比如缅甸语)Text组件换行显示重叠的情况

Column() {
  Text(this.data.title)
    .titleStyle()

  Text(this.data.subTitle)
    .subTitleStyle()
    .visibility(this.data.subTitle === '' ? Visibility.None : Visibility.Visible)
}
.layoutWeight(1)
.margin({ left: 6 })
.alignItems(HorizontalAlign.Center)
.justifyContent(FlexAlign.Center)

......

@Extend(Text)
function subTitleStyle() {
  .textAlign(TextAlign.Center)
  .fontSize(15)
  .fontColor($r('app.color.color_text_second'))
  .fontWeight(FontWeight.Regular)
  .fontFamily('HarmonyOSHans0114')
  .lineHeight(17.5)
  .heightAdaptivePolicy(TextHeightAdaptivePolicy.MAX_LINES_FIRST)
  .align(Alignment.Center)
  .wordBreak(WordBreak.BREAK_WORD)
  .margin({ top: 2 })
  .minFontSize(10)
  .maxFontSize(15)
  .maxLines(3)
  .textOverflow({ overflow: TextOverflow.Ellipsis })
  .lineBreakStrategy(LineBreakStrategy.BALANCED)
}

@Extend(Text)
function titleStyle() {
  .fontSize(19)
  .fontColor($r('app.color.color_text_primary'))
  .fontWeight(FontWeight.Medium)
  .fontFamily('HarmonyOSHans0114')
  .lineHeight(22)
  .align(Alignment.Center)
  .wordBreak(WordBreak.BREAK_WORD)
  .minFontSize(15)
  .maxFontSize(19)
  .maxLines(2)
  .textOverflow({ overflow: TextOverflow.Ellipsis })
  .lineBreakStrategy(LineBreakStrategy.BALANCED)
}

cke_3628.png


更多关于HarmonyOS 鸿蒙Next中Text组件小语种换行显示重叠的实战教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

开发者您好,针对缅甸语,需要做特殊处理。您这边可以通过将字体大小调小或者增加行高的方式来避免文字重叠的问题。

更多关于HarmonyOS 鸿蒙Next中Text组件小语种换行显示重叠的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS Next中,Text组件小语种文本换行显示重叠问题,通常与字体渲染和布局计算有关。可通过设置Text组件的maxLineslineHeight属性控制行高,或使用TextOverflow管理溢出。对于复杂文本,建议使用TextMetrics获取文本尺寸进行精确布局调整。

这个问题通常与复杂脚本(如缅甸语)的文本布局和行高计算有关。从你的代码看,已经设置了.lineHeight(17.5).heightAdaptivePolicy(TextHeightAdaptivePolicy.MAX_LINES_FIRST),但在某些小语种下,系统可能无法准确计算文本的实际视觉高度,导致换行时行框重叠。

可以尝试以下方法:

  1. 调整布局策略:将heightAdaptivePolicyMAX_LINES_FIRST改为MIN_FONT_SIZE_FIRSTLAYOUT_CONSTRAINT_FIRST。这可能会改变高度计算的优先级,避免因优先保证行数而导致的行框压缩。

    .heightAdaptivePolicy(TextHeightAdaptivePolicy.MIN_FONT_SIZE_FIRST)
    
  2. 显式设置高度或使用弹性布局:如果文本区域高度固定,可以尝试为Text组件或父容器设置一个明确的.height()。或者,使用.layoutWeight(1)让Column分配剩余空间,但需注意父容器的约束。

  3. 检查字体支持:确保HarmonyOSHans0114字体家族包含缅甸语字符。如果字体缺失,系统会回退到其他字体,可能导致度量不一致。可以指定一个更通用的字体栈或添加回退字体。

  4. 调整行高与字体大小比例:对于某些复杂脚本,行高可能需要相对字体大小有更大余量。尝试将.lineHeight()设置为fontSize的1.2倍或更高(例如,对于fontSize:15,设置lineHeight:21)。

  5. 简化Text样式:临时移除.heightAdaptivePolicy().minFontSize().maxFontSize()等高级属性,测试基础布局是否正常,以定位问题属性。

  6. 使用.textCase(TextCase.NORMAL):确保文本没有被转换为大写,这会影响字符布局。

如果上述方法无效,可能是平台对特定语言文本引擎的处理问题。你可以提供一个包含缅甸语文本的最小可复现代码片段,以便进一步分析。

回到顶部