Delphi 10.4开发Android应用时Nirmala UI天城文字体显示异常问题
Delphi 10.4 Android天城文(尼泊尔语)显示异常解决方案
针对你遇到的TEdit、TLabel、TMemo控件中天城文显示拆分的问题,可按以下步骤排查解决:
优先使用Android系统自带天城文字体
天城文需要字体支持连字(Ligatures)和字形组合渲染,Nirmala UI在Android端可能存在适配问题。直接将控件字体设置为系统自带的Noto Sans Devanagari,无需额外部署字体:Label1.Font.Name := 'Noto Sans Devanagari'; Edit1.Font.Name := 'Noto Sans Devanagari'; Memo1.Font.Name := 'Noto Sans Devanagari';强制启用控件的高级字形渲染
Delphi Android控件默认可能未开启复杂字形渲染,需通过代码启用连字和抗锯齿:uses Androidapi.JNI.Widget, Androidapi.JNI.GraphicsContentViewText; // 为TLabel启用连字 Label1.TextSettings.Font.Features := [TFontFeature.Create('liga', 1), TFontFeature.Create('dlig', 1)]; // 为TEdit启用高级渲染 if Edit1.Handle <> 0 then begin var JEdit := TJEditText.Wrap(Edit1.Handle); var Paint := JEdit.getPaint; Paint.setFlags(Paint.getFlags or TJPaint.JavaClass.ANTI_ALIAS_FLAG); Paint.setSubpixelText(True); end; // 为TMemo设置高质量换行策略 if Memo1.Handle <> 0 then begin var JTextView := TJTextView.Wrap(Memo1.Handle); JTextView.setBreakStrategy(TJTextView.JavaClass.BREAK_STRATEGY_HIGH_QUALITY); end;确保使用组合式Unicode编码文本
异常显示的“भ ास ा”是因为文本被拆分为基础字符+独立元音变音,需使用组合式Unicode编码的字符串。直接在代码中赋值组合后的文本:Label1.Text := 'भासा';验证自定义字体的加载逻辑
若坚持使用Nirmala UI,需确认字体文件部署路径正确且加载方式无误:- 在Project Manager的Deployment中添加字体文件,设置Remote Path为
assets\fonts\ - 代码中从assets目录加载字体:
uses System.IOUtils, System.Types; var FontPath: string; begin FontPath := TPath.Combine(TPath.GetAssetsPath, 'fonts\Nirmala.ttf'); if TFile.Exists(FontPath) then begin Label1.Font.LoadFromFile(FontPath); // 同步启用连字 Label1.TextSettings.Font.Features := [TFontFeature.Create('liga', 1)]; end; end;
- 在Project Manager的Deployment中添加字体文件,设置Remote Path为
内容的提问来源于stack exchange,提问作者suren
相关产品推荐
相关产品推荐

