android:fontFamily的有效值及其对应的值是什么?


266

此问题的答案中,用户列出了android:fontFamily和的12个变量的值(请参见下文)。这些价值从何而来?的文档android:fontFamily未在任何地方列出此信息(我在此处此处进行了检查)。字符串在Android styles.xml文件的不同位置列出,但是这些字符串如何映射回Roboto字体?

从android 4.1 / 4.2开始,可以使用以下Roboto字体系列:

android:fontFamily="sans-serif"           // roboto regular  
android:fontFamily="sans-serif-light"     // roboto light  
android:fontFamily="sans-serif-condensed" // roboto condensed  
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)  
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

与此结合

android:textStyle="normal|bold|italic" 

12种变体是可能的:

  • 定期
  • 斜体
  • 胆大
  • 加粗斜体
  • 斜体
  • 细斜体
  • 浓缩常规
  • 斜体字
  • 浓缩粗体
  • 粗体斜体

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

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

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

Answers:


346

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

这些确实没有在文档中列出。但他们提到这里下的部分“字体家庭”。该文档列出了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>

为了快速参考,这是它们的外观:


2
Haha:DI实际上在此之前就知道该站点,因此查找它并不困难。但供以后参考:我更喜欢在Google搜索上使用developer.android.com上的搜索,因为您可以将搜索范围限制为仅API,博客文章,发行说明等
。– Ahmad

8
如果你有兴趣:是其中的字体定义。此类加载字体,并且字体会自动管理它们。
艾哈迈德

1
@androiddeveloper完成了。Roboto黑色不代表字体的颜色,而只是Roboto Bold的“更粗体”版本。我在底部添加了参考图像。
艾哈迈德(Ahmad)2015年

1
@Ahmad感谢您澄清这一点。这是您的+1 ... :)
Android开发人员

2
此外,还有很多别名使用具有fontFamily中android.googlesource.com/platform/frameworks/base/+/master/data/...
Pauland

110

可用字体(从Oreo开始)

预览所有字体

材料设计印刷术”页面上有一些这些字体的演示以及有关选择字体和样式的建议。

对于代码侦探: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和以前的system_fonts.xml日志,您可以看到每种字体的添加时间:

  • 冰淇淋三明治: Roboto常规,粗体,斜体和粗斜体
  • 果冻豆: Roboto浅色,浅斜体,浓缩,浓缩粗体,浓缩斜体和浓缩粗体斜体
  • 果冻豆MR1: Roboto薄斜体
  • 棒糖:
    • Roboto中斜体,中斜体,黑色和黑色斜体
    • Noto Serif常规,粗体,斜体,粗体斜体
    • 单声道
    • 快来了
    • 舞蹈剧本
    • 卡罗瓦哥特式SC
    • 诺托·桑斯(Noto Sans)
  • 奥利奥MR1: Roboto浓缩培养基

1
您如何在日志中找到有关Android版本的信息?
Android开发人员

3
@androiddeveloper我正在查看每行添加的日期。要确切了解特定版本中可用的字体,请查看该版本的system_fonts.xml,例如Lollipop:android.googlesource.com/platform/frameworks/base/+/…
Newtonx

我对此唯一的抱怨是,它不是按字母顺序排列的:p但还是!这应该是最好的答案!谢谢!
T.Woody

9

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

即:

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" />

1
在recyclerview中,这可能会
浪费
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.