282

在回答这个问题时,用户列出了android:fontFamily12 个变量的值(见下文)。这些价值观从何而来?的文档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),并删除在查看文件之前创建的某些样式中的所有冗余。

4

3 回答 3

363

这些价值观从何而来?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>

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

于 2013-10-30T19:29:17.883 回答
128

可用字体(截至奥利奥)

所有字体的预览

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

For code sleuths: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 常规、粗体、斜体和粗斜体
  • Jelly Bean: Roboto light、light italic、condensed、condensed bold、condensed italic 和 condensed bold italic
  • Jelly Bean MR1: Roboto瘦瘦斜体
  • 棒糖:
    • Roboto 中、中斜体、黑色和黑色斜体
    • Noto Serif 常规、粗体、斜体、粗斜体
    • 可爱的单声道
    • 快来了
    • 舞蹈剧本
    • Carrois 哥特式 SC
    • 诺托桑斯
  • Oreo MR1: Roboto浓缩介质
于 2014-06-06T00:44:05.983 回答
9

据我所知,您不能在 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" />
于 2013-10-30T19:29:10.043 回答