ChatGPT解决这个技术问题 Extra ChatGPT

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

在对 this question 的回答中,用户列出了 android:fontFamily 和 12 个变体的值(见下文)。这些价值观从何而来? android:fontFamily 的文档没有在任何地方列出此信息(我检查了 herehere)。这些字符串列在 Android styles.xml 文件的各个位置,但这些字符串如何映射回 Roboto 字体?

从 android 4.1 / 4.2 开始,以下 Roboto 字体系列可用: android:fontFamily="sans-serif" // 机器人常规 android:fontFamily="sans-serif-light" // 机器人灯 android:fontFamily="sans-serif -condensed" // 精简机器人 android:fontFamily="sans-serif-thin" // 瘦机器人 (android 4.2) android:fontFamily="sans-serif-medium" // 结合这个机器人的机器人中型 (android 5.0) :textStyle="normal|bold|italic" 有 12 种可能的变体: 常规斜体 粗体 粗体-斜体 轻细斜体 细细 斜体 简体常规 简体斜体 简体粗体 简体粗体-斜体

在我正在处理的应用程序的 styles.xml 文件中,有人将此列为字体系列,我很确定这是错误的:

<item name="android:fontFamily">Roboto-Regular.ttf</item>

我想正确设置我们应用程序的主题(包括正确使用 fontFamily),并删除在查看文件之前创建的某些样式中的所有冗余。


a
arekolek

这些价值观从何而来? android:fontFamily 的文档没有在任何地方列出此信息

这些确实没有在文档中列出。但在“字体系列”部分中提到了 here。该文档列出了适用于 Android Jelly Bean 4.1 的每个新公共 API。

在我正在研究的应用程序的styles.xml文件中,有人将其列为字体系列,我很确定这是错误的:

是的,这是错误的。您不引用字体文件,您必须使用上面链接文档中提到的字体名称。在这种情况下,它应该是这样的:

<item name="android:fontFamily">sans-serif</item>

就像已经说明的链接答案一样,可能有 12 种变体:

在 Android Jelly Bean (4.1) - API 16 中添加:

常规(默认):

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item> 

斜体:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">italic</item>

大胆的:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>

加粗斜体:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>

光:

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>

浅斜体:

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">italic</item>

薄的 :

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">normal</item>

细斜体:

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>

浓缩正则:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>

浓缩斜体:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>

浓缩粗体:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>

浓缩粗斜体:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>

在 Android Lollipop (v5.0) - API 21 中添加:

中等的:

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>

中斜体:

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">italic</item>

黑色的:

<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textStyle">italic</item>

为了快速参考,它们都是这样的:

https://developer.android.com/design/media/typography_variants@2x.png


哈哈:DI其实在那之前就知道这个网站了,所以找到并不难。但为了将来参考:我更喜欢使用 developer.android.com 上的搜索而不是 google 搜索,因为您可以将搜索限制为仅 API、博客文章、发行说明等。
如果您有兴趣:This 是定义字体的位置。 This class 加载字体并由 this one 管理它们。
@androiddeveloper 完成。 Roboto black 不是指字体的颜色,而只是 Roboto Bold 的“更粗”版本。我在底部添加了参考图像。
@Ahmad 感谢您澄清这一点。这是您的 +1 ... :)
此外,还有很多别名可用于 fontFamily android.googlesource.com/platform/frameworks/base/+/master/data/…
N
Newtonx

可用字体(截至奥利奥)

https://i.stack.imgur.com/MM70p.png

Material Design Typography 页面包含其中一些字体的演示以及有关选择字体和样式的建议。

对于代码侦探:fonts.xml 是最终且不断扩展的 Android 字体列表。

使用这些字体

设置 android:fontFamilyandroid:textStyle 属性,例如

<!-- Roboto Bold -->
<TextView
    android:fontFamily="sans-serif"
    android:textStyle="bold" />

到此表中的所需值:

Font                     | android:fontFamily          | android:textStyle
-------------------------|-----------------------------|-------------------
Roboto Thin              | sans-serif-thin             |
Roboto Light             | sans-serif-light            |
Roboto Regular           | sans-serif                  |
Roboto Bold              | sans-serif                  | bold
Roboto Medium            | sans-serif-medium           |
Roboto Black             | sans-serif-black            |
Roboto Condensed Light   | sans-serif-condensed-light  |
Roboto Condensed Regular | sans-serif-condensed        |
Roboto Condensed Medium  | sans-serif-condensed-medium |
Roboto Condensed Bold    | sans-serif-condensed        | bold
Noto Serif               | serif                       |
Noto Serif Bold          | serif                       | bold
Droid Sans Mono          | monospace                   |
Cutive Mono              | serif-monospace             |
Coming Soon              | casual                      |
Dancing Script           | cursive                     |
Dancing Script Bold      | cursive                     | bold
Carrois Gothic SC        | sans-serif-smallcaps        |

(Noto Sans 是一种备用字体;您不能直接指定它)

注意:此表派生自 fonts.xml。每个字体的系列名称和样式都列在 fonts.xml 中,例如

<family name="serif-monospace">
    <font weight="400" style="normal">CutiveMono.ttf</font>
</family>

因此,serif-monospace 是字体系列,normal 是样式。

兼容性

根据 fonts.xml 的 log 和之前的 system_fonts.xml,您可以看到添加每种字体的时间:

冰淇淋三明治:Roboto 常规、粗体、斜体和粗斜体

Jelly Bean:Roboto light、light italic、condensed、condensed bold、condensed italic 和 condensed bold italic

Jelly Bean MR1:Roboto瘦瘦斜体

Lollipop:Roboto 中等、中等斜体、黑色和黑色斜体 Noto Serif 常规、粗体、斜体、粗体斜体 Cutive Mono Coming Soon Dancing Script Carrois Gothic SC Noto Sans

Roboto 中、中斜体、黑色和黑色斜体

Noto Serif 常规、粗体、斜体、粗斜体

可爱的单声道

快来了

舞蹈剧本

Carrois 哥特式 SC

诺托桑斯

Oreo MR1:Roboto浓缩介质


您如何在日志中找到有关 Android 版本的信息?
@androiddeveloper 我正在查看添加每一行的日期。要准确了解特定版本中可用的字体,请查看该版本的 system_fonts.xml,例如 Lollipop:android.googlesource.com/platform/frameworks/base/+/…
我对此唯一的抱怨是它没有按字母顺序排列:p 但仍然如此!这应该是最好的答案!谢谢!
A
Ahmad

据我所知,您不能在 xml 或主题中声明自定义字体。我通常只是制作扩展 textview 的自定义类,在实例化时设置自己的字体并在我的布局 xml 文件中使用它们。

IE:

public class Museo500TextView extends TextView {
    public Museo500TextView(Context context, AttributeSet attrs) {
        super(context, attrs);      
        this.setTypeface(Typeface.createFromAsset(context.getAssets(), "path/to/font.ttf"));
    }
}

<my.package.views.Museo900TextView
        android:id="@+id/dialog_error_text_header"
        android:layout_width="190dp"
        android:layout_height="wrap_content"
        android:gravity="center_horizontal"
        android:textSize="12sp" />

这可能会在回收站视图中消耗大量内存