5

在我们的应用程序中,我们使用的是 Roboto 和 Roboto Bold。但是,在某些 Android 版本(似乎是 4.0 到 4.1)中,我们在使用导入的 Roboto 版本(即 using Typeface.createFromAsset())时会出现文本呈现问题,而仅使用 Roboto 的内置版本(即Typeface.DEFAULT)时不会出现这种问题。

我知道 Roboto 和 Roboto Bold 是在 Android 4.0 中引入的,但我似乎找不到任何东西可以保证无论制造商如何修改这些字体都可用(例如 Touchwiz、Sense)。如果保证它们存在,我们可以使用版本检查仅对低于 Android 4.0 的设备使用自定义导入。

4

2 回答 2

3

编辑:通过一些实验,特别是允许用户更改字体的 Galaxy S3,这就是我发现的:

  • 使用Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL)将返回该 CUSTOM 字体,而不是系统默认的无衬线字体(即 Roboto)
  • 相反,使用Typeface.create("sans-serif", Typeface.NORMAL)(或 BOLD)它会返回 Roboto,而不管用户的字体自定义如何。从下面的列表中,您实际上可以使用上面的“helvetica”、“tahoma”、“verdana”或“arial”来代替“sans-serif”,结果相同。

我发现一个名为system_fonts.xml似乎确认 Roboto 将用于Typeface.SANS_SERIFSDK 目录下的任何引用的文档:

平台 > android-14 > 数据 > 字体

<!--
    System Fonts

    This file lists the font families that will be used by default for all supported glyphs.
    Each entry consists of a family, various names that are supported by that family, and
    up to four font files. The font files are listed in the order of the styles which they
    support: regular, bold, italic and bold-italic. If less than four styles are listed, then
    the styles with no associated font file will be supported by the other font files listed.

    The first family is also the default font, which handles font request that have not specified
    specific font names.

    Any glyph that is not handled by the system fonts will cause a search of the fallback fonts.
    The default fallback fonts are specified in the file /system/etc/fallback_fonts.xml, and there
    is an optional file which may be supplied by vendors to specify other fallback fonts to use
    in /vendor/etc/fallback_fonts.xml.
-->
<familyset>

    <family>
        <nameset>
            <name>sans-serif</name>
            <name>arial</name>
            <name>helvetica</name>
            <name>tahoma</name>
            <name>verdana</name>
        </nameset>
        <fileset>
            <file>Roboto-Regular.ttf</file>
            <file>Roboto-Bold.ttf</file>
            <file>Roboto-Italic.ttf</file>
            <file>Roboto-BoldItalic.ttf</file>
        </fileset>
    </family>

由于必须放入供应商字体fallback_fonts.xml并且系统字体将始终被优先考虑,并且列出的第一个系列是 sans-serif、aria、helvetica、tahoma 或 verdana 别名下的 Roboto,除非我发现否则我认为它是安全的假设 Roboto 将是调用返回的字体Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL)

我现在仍将保持开放状态,希望得到一个明确的答案,因为我不确定是否允许 OEM 修改 system_fonts.xml。如果是,那么这根本没有帮助。

于 2013-02-27T22:12:22.427 回答
1

Android 4.0 兼容性文档的第 3.8.5 节中,它说:

3.8.5。主题 Android 提供“主题”作为应用程序在整个 Activity 或应用程序中应用样式的机制。Android 3.0 引入了一个新的“Holo”或“holographic”主题作为一组定义的样式供应用程序开发人员使用,如果他们想要匹配 Android SDK [Resources, 24] 定义的 Holo 主题外观和感觉。设备实现不得更改任何公开给应用程序的 Holo 主题属性 [Resources, 25]。Android 4.0 引入了一个新的“设备默认”主题作为一组定义的样式,供应用程序开发人员使用,如果他们想要匹配设备实现者定义的设备主题的外观和感觉。

AFAIK,Roboto 字体集是 holo 主题的一部分,因此必须存在于任何经 Google 认证(即运行 Google Play)的 Android 4.0 及更高版本的设备上。

同样的要求也出现在4.14.2文件中

(在 PDF 中搜索 Holo 以快速找到该部分。只有 4 次提及)

于 2013-02-27T19:57:33.113 回答