【问题标题】:Text with "f" following "i", cannot see the dot on the "i", sans font“i”后面有“f”的文本,看不到“i”上的点,无字体
【发布时间】:2013-07-15 13:15:23
【问题描述】:

我有一个按钮,其中有文本“发送文件”,但我看不到“i”顶部的点。我使用的是默认字体(据我所知,它是“sans”,但如果我错了,请纠正我)。

这是我的Buttonxml

            <Button
                android:id="@+id/button_send_files"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_marginBottom="5dip"
                android:padding="20dip"
                android:text="Send files"
                android:textColor="@color/black"
                android:textSize="24sp"
                android:textStyle="bold" />

如果有人有某种技巧可以在“i”上显示点,那就太好了,因为它现在很丑......

如果有帮助的话,我正在使用 Nexus 7。

【问题讨论】:

  • 用放大镜,有点!
  • @matheszabi 你找麻烦,这里是......:P
  • 哦,放大镜...在我看来,如果你仔细观察,“i”是不可见的,或者它不是居中的(如果你愿意,可以使用放大镜:D)
  • 你总是可以使用不同的字体。
  • 是的,但我不太喜欢这个主意...首先,我必须在整个应用程序中更改它,其次,其他基本字体看起来不太好我的想法。这就是为什么我试图找到另一个解决方案

标签: android button fonts textview


【解决方案1】:

您看到的是“f”+“i”字符组合的ligature 字形。通常,独立的“f”+独立的“i”的组合最终会发生冲突:“f”的悬垂部分会与“i”的点碰撞。

使用连字字形来表示字符组合可以让字体设计者避免冲突。在这种情况下,字体设计者选择省略“i”的点。在其他字体设计中,“i”的点将保留,但“f”的悬垂部分的长度会改变以避免碰撞。如果您检查其他一些包含“f”+“i”连字的字体设计,您会看到这些不同的视觉处理。由于这是一个字体设计决定,因此很难将其描述为“错误”;更像是“糟糕的设计”(我同意你的观点,它看起来不太好)。

【讨论】:

  • 感谢您的准确回答。我不知道这可能是这种解释。最后一个问题,如果可以的话:你知道有什么方法可以避免使用这种“连字”并使用普通的 f 和 i 字符吗?
  • 在某些文本布局方案中,程序员可以覆盖默认设置并禁用连字和其他基于字体的功能。我对 Android 的了解还不够,不能说是不是这样。对于那个很抱歉。搜索“禁用连字 android textview”之类的内容可能会让您走上正确的道路。
  • 我找了它,但没有找到任何解决方案...我能做的最好的就是写发送文件而不是发送文件,这是完全可以接受的
  • 对,这对于您控制下的文本可以正常工作,就像创建按钮时一样。但是,如果您使用无法控制的文本,您可能仍然会遇到问题。例如:根据用户(或其他)提供的文本创建一个小部件。这对您现在可能不是问题,但需要注意。祝你好运!
【解决方案2】:

要禁用连字,您可以在TextView 上使用android:fontFeatureSettings 属性。此属性接受 CSS 属性 font-feature-settings 的有效值。这是来自 MDN 的list of examples。他们举了一个在那里禁用连字的例子。

这是你在TextView 上使用它的方法(我已经验证过它有效):

android:fontFeatureSettings="liga 0"

您也可以在styles.xml 中执行此操作:

<style name="your_text_style">
    <item name="android:fontFeatureSettings">liga 0</item>
</style>

【讨论】:

    【解决方案3】:

    从 Lollipop 开始,您现在可以使用 android:fontFeatureSettingssetFontFeatureSettings()disable ligatures

    【讨论】:

      【解决方案4】:

      更改字体是目前唯一可行的解​​决方案。 Roboto-Regular 的连字字形处理不好。尝试将字体更改为sans。它并不优雅,但它确实有效。

      【讨论】:

      • 我想我已经在使用 sans 字体,正如我在问题中解释的那样
      • 我认为nexus 7的默认字体是Roboto Regular。 ICS 之后的所有操作系统版本都使用 Roboto 作为默认字体。
      • 因此自 ICS 以来 Roboto Regular 等于 sans
      【解决方案5】:

      我知道这篇文章很旧,但当您在 ​​google 上搜索“禁用 android 上的连字”时,它是最佳结果。显然有办法做到这一点,但它只适用于 API 21 和更新版本。所以这是我的解决方案。下载免费的字体编辑程序 FontForge,从实际字体(fi 和 fl)中删除连字字形,然后重新保存字体文件。像魅力一样工作!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-13
        • 2012-12-08
        • 1970-01-01
        • 2019-02-25
        • 1970-01-01
        相关资源
        最近更新 更多