android:fontFamily的有效值及其映射到的内容?

在这个问题的答案中,用户列出了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),并删除在查看文件之前创建的某些样式中的所有冗余。


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

    为了快速参考,这是他们所有的样子:


    可用字体(来自奥利奥)

    预览所有字体

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

    对于代码侦查: 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定期,大胆,斜体,粗体斜体
  • Cutive Mono
  • 快来了
  • 舞蹈剧本
  • Carrois哥特式SC
  • Noto Sans
  • 奥利奥MR1: Roboto浓缩中等

  • 据我所知,你不能在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" />
    
    链接地址: http://www.djcxy.com/p/24607.html

    上一篇: Valid values for android:fontFamily and what they map to?

    下一篇: How to check if a service is running on Android?