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

From android 4.1 / 4.2, the following Roboto font families are available: 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) in combination with this android:textStyle="normal|bold|italic" 12 variants are possible: Regular Italic Bold Bold-italic Light Light-italic Thin Thin-italic Condensed regular Condensed italic Condensed bold Condensed bold-italic

在我正在工作的应用程序中的styles.xml文件中,有人将其列为字体家族,我非常确定这是错误的:

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

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


当前回答

据我所知,你不能在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"));
    }
}

and

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

其他回答

据我所知,你不能在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"));
    }
}

and

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

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

这些确实没有在文档中列出。但是在这里的“Font族”一节中提到了它们。该文档列出了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>

Light-italic:

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

Thin-italic:

<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棒棒糖(v5.0) - API 21中添加:

介质:

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

Medium-italic:

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

作为快速参考,这是它们的样子:

可用字体(截至奥利奥)

材料设计排版页面有一些这些字体的演示,以及选择字体和样式的建议。

对于代码侦探:fonts.xml是Android字体的权威和不断扩展的列表。


使用这些字体

设置android:fontFamily和android: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中,中斜体,黑色和黑色斜体 无衬线规则,粗体,斜体,粗体斜体 Cutive Mono 即将到来的 跳舞的脚本 Carrois Gothic SC 诺托无 奥利奥MR1: Roboto浓缩培养基