ChatGPT解决这个技术问题 Extra ChatGPT

Android中的默认字体系列是什么?

从 API 16 开始,引入了 Jellybean Roboto 作为可用的字体系列。查看 Android 16 here 中的“新”功能。

TextView 上指定 android:fontFamily="sans-serif"(API 16+ 中的 Roboto)作为 TextView 的默认 fontFamily

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

相当于

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="sans-serif" />

?

Material design typography website

“Roboto 和 Noto 是 Android 和 Chrome 上的标准字体。”

Wiki

“Roboto 是谷歌开发的一种无衬线字体家族,作为其移动操作系统 Android 的系统字体。”

我在文档中没有看到 Android 的默认 fontFamily 是什么。请参阅参考资料:

https://developer.android.com/reference/android/R.attr.html#fontFamily

android:fontFamily 的有效值以及它们映射到什么?

https://developer.android.com/about/versions/android-4.1.html#Fonts

http://alvinalexander.com/photos/android-roboto-fonts-examples

您输入的两个项目是等效的。虽然他们不调用 sans-serif Roboto,但它实际上是 Android 中的默认字体系列。
为什么这被否决了?
@Weava您有支持该文档的链接吗?
不,但 Jared Rummier 给出的答案比我能想到的要好得多:)

C
Community

d.android.com 上没有关于字体系列名称的文档。但是,如果您查看 AOSP,则会在 android.graphics.* 中加载默认字体。 FontListParser/system/etc/fonts.xml (Android 5.0+) 或 /system/etc/system_fonts.xml (Android 4.1) 加载默认字体。默认字体在 Typeface#init 中加载。

这两个 XML 文件有一些文档。第一种字体是默认字体。您可以从设备中提取 /system/etc/fonts.xml。设备制造商或自定义 ROM 可能会更改默认系统字体。

fonts.xml (API 21+)

注意:这是系统字体配置的较新 (L) 版本,支持更丰富的粗细选择。一些应用程序需要旧版本,因此请保持 system_fonts.xml 和 fallback_fonts.xml 与任何更改同步,即使框架只会读取此文件。所有没有名称的字体都被添加到默认列表中。字体是根据匹配选择的:完整的 BCP-47 语言标签,包括脚本,然后是语言,最后是顺序(第一个包含字形的字体)。出现顺序也是体重匹配的决胜局。这就是为什么 Roboto 的 900 重量在 700 重量之前的原因 - 当需要 800 重量时,我们更喜欢前者。由于粗体跨度有效地增加了 300 的权重,这确保了 900 是粗体与 500 的权重配对,从而确保了足够的对比度。

system_fonts.xml (API 16-20)

系统字体 该文件列出了默认情况下将用于所有支持的字形的字体系列。每个条目由一个系列、该系列支持的各种名称以及最多四个字体文件组成。字体文件按它们支持的样式顺序列出:常规、粗体、斜体和粗斜体。如果列出的样式少于四种,则列出的其他字体文件将支持没有关联字体文件的样式。第一个系列也是默认字体,它处理没有指定特定字体名称的字体请求。系统字体未处理的任何字形都将导致搜索备用字体。默认的备用字体在文件 /system/etc/fallback_fonts.xml 中指定,供应商可能会提供一个可选文件来指定在 /vendor/etc/fallback_fonts.xml 中使用的其他备用字体。

如果您解析 fonts.xml 文件,您可以找到哪个字体系列使用哪个字体(请参阅 here):

╔════╦════════════════════════════╦═════════════════════════════╗
║    ║ FONT FAMILY                ║ TTF FILE                    ║
╠════╬════════════════════════════╬═════════════════════════════╣
║  1 ║ casual                     ║ ComingSoon.ttf              ║
║  2 ║ cursive                    ║ DancingScript-Regular.ttf   ║
║  3 ║ monospace                  ║ DroidSansMono.ttf           ║
║  4 ║ sans-serif                 ║ Roboto-Regular.ttf          ║
║  5 ║ sans-serif-black           ║ Roboto-Black.ttf            ║
║  6 ║ sans-serif-condensed       ║ RobotoCondensed-Regular.ttf ║
║  7 ║ sans-serif-condensed-light ║ RobotoCondensed-Light.ttf   ║
║  8 ║ sans-serif-light           ║ Roboto-Light.ttf            ║
║  9 ║ sans-serif-medium          ║ Roboto-Medium.ttf           ║
║ 10 ║ sans-serif-smallcaps       ║ CarroisGothicSC-Regular.ttf ║
║ 11 ║ sans-serif-thin            ║ Roboto-Thin.ttf             ║
║ 12 ║ serif                      ║ NotoSerif-Regular.ttf       ║
║ 13 ║ serif-monospace            ║ CutiveMono.ttf              ║
╚════╩════════════════════════════╩═════════════════════════════╝

谁能解释每个 TTF 文件是如何映射为每个字体系列的默认值的?例如,对于 sans-serif,为什么使用 Roboto-Regular 是 TTF 文件?我看到这个字体系列中列出了许多文件。为什么选择这个特定的一个而不是其他的?
好的,我看到您使用 400 作为阈值来确定默认字体(查看您在另一篇文章中的代码)。为什么是400?
@coolDude,“正常”的权重值为 400。根据 w3.org/TR/css-fonts-4/#font-weight-absolute-values