【问题标题】:Valid values for android:fontFamily and what they map to?android:fontFamily 的有效值以及它们映射到什么?
【发布时间】:2013-11-10 13:46:51
【问题描述】:

this question 的答案中,用户列出了android:fontFamily 的值和12 个变体(见下文)。这些价值观从何而来? android:fontFamily 的文档没有在任何地方列出此信息(我检查了herehere)。字符串在 Androidstyles.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 fonts styles


    【解决方案1】:

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

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

    【讨论】:

    • 哈哈 :D 其实在那之前我就知道这个网站了,所以找到它并不难。但为了将来参考:我更喜欢使用 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/…
    【解决方案2】:

    可用字体(从 Oreo 开始)

    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 细细斜体
    • 棒棒糖:
      • Roboto 中号、中号斜体、黑色和黑色斜体
      • Noto Serif 常规、粗体、斜体、粗斜体
      • 可爱的单声道
      • 即将推出
      • 舞蹈脚本
      • Carrois Gothic SC
      • Noto Sans
    • 奥利奥 MR1: Roboto 浓缩培养基

    【讨论】:

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

    据我所知,您不能在 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" />
    

    【讨论】:

    • 这会在回收站视图中消耗大量内存
    猜你喜欢
    • 2014-10-22
    • 2011-08-03
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2017-09-17
    • 2014-06-01
    相关资源
    最近更新 更多