You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android TextView使用GT Haptik字体时ATM显示为商标符号,如何解决?

解决方案:Android TextView 中GT Haptik字体自动转换TM为商标符号的问题

这个问题的核心是GT Haptik字体内置了**连字(Ligatures)**规则,Android TextView默认开启了字体连字解析,所以会把连续的"TM"替换成商标符号;而Microsoft Office默认没有启用这类特定连字,所以不会出现这个问题。

下面是几种可行的解决办法:

  • 禁用TextView的字体连字功能
    这是最直接的方案,通过关闭连字解析来阻止自动替换:

    • 在XML布局中设置:
      <TextView
          android:id="@+id/tv_example"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="ATM"
          android:fontFeatureSettings="'liga' off" />
      
    • 或者在代码中动态设置(Kotlin):
      val originalTypeface = Typeface.createFromAsset(assets, "GT-Haptik.ttf")
      val noLigatureTypeface = Typeface.Builder(originalTypeface)
          .setFontFeatureSettings("'liga' off")
          .build()
      textView.typeface = noLigatureTypeface
      
    • Java版本:
      Typeface originalTypeface = Typeface.createFromAsset(getAssets(), "GT-Haptik.ttf");
      Typeface noLigatureTypeface = new Typeface.Builder(originalTypeface)
          .setFontFeatureSettings("'liga' off")
          .build();
      textView.setTypeface(noLigatureTypeface);
      
  • 手动拆分文本规避连字
    如果不想修改字体配置,可以在"TM"之间插入零宽空格(Unicode编码\u200B),比如将文本"ATM"改为"AT\u200BM"。这样视觉上不会有额外空格,但TextView不会将其识别为连字序列,也就不会替换成商标符号。

  • 修改字体文件的连字规则
    如果你有权限编辑字体文件,可以用FontForge这类字体编辑工具打开GT Haptik字体,找到对应"TM"的连字条目并删除,重新导出字体后再引入项目使用。这种方式一劳永逸,不需要修改代码。

内容的提问来源于stack exchange,提问作者Yanay Lehavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 21:01:54