android:fontFamily的有效值以及它们映射到的内容?

Chr*_*rry 255 fonts android styles

这个问题的答案中,用户列出了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)
Run Code Online (Sandbox Code Playgroud)

与此相结合

android:textStyle="normal|bold|italic" 
Run Code Online (Sandbox Code Playgroud)

可能有12种变体:

  • 定期
  • 斜体
  • 胆大
  • 加粗斜体
  • 光斜体
  • 薄斜体
  • 经常凝聚
  • 浓缩斜体
  • 浓缩大胆
  • 浓缩大胆的斜体

styles.xml应用程序的文件中我正在处理有人将其列为字体系列,我很确定它是错误的:

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

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

Ahm*_*mad 343

这些价值来自哪里?android:fontFamily的文档不会在任何地方列出此信息

这些确实没有在文档中列出.但是在"字体系列"一节中提到它们.该文档列出了Android Jelly Bean 4.1的每个新公共API.

在应用程序的styles.xml文件中,我正在处理有人将其列为字体系列,我很确定它是错误的:

是的,那是错的.您没有引用字体文件,您必须使用上面链接文档中提到的字体名称.在这种情况下它应该是这样的:

<item name="android:fontFamily">sans-serif</item>
Run Code Online (Sandbox Code Playgroud)

与已经陈述的链接答案一样,有12种变体是可能的:

在Android Jelly Bean(4.1)中添加 - API 16:

常规(默认):

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">normal</item> 
Run Code Online (Sandbox Code Playgroud)

斜体:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">italic</item>
Run Code Online (Sandbox Code Playgroud)

大胆:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold</item>
Run Code Online (Sandbox Code Playgroud)

大胆的:

<item name="android:fontFamily">sans-serif</item>
<item name="android:textStyle">bold|italic</item>
Run Code Online (Sandbox Code Playgroud)

:

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>
Run Code Online (Sandbox Code Playgroud)

轻斜体:

<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">italic</item>
Run Code Online (Sandbox Code Playgroud)

:

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">normal</item>
Run Code Online (Sandbox Code Playgroud)

细斜体:

<item name="android:fontFamily">sans-serif-thin</item>
<item name="android:textStyle">italic</item>
Run Code Online (Sandbox Code Playgroud)

简明定期:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">normal</item>
Run Code Online (Sandbox Code Playgroud)

浓缩斜体:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">italic</item>
Run Code Online (Sandbox Code Playgroud)

简洁大胆:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold</item>
Run Code Online (Sandbox Code Playgroud)

浓缩粗体:

<item name="android:fontFamily">sans-serif-condensed</item>
<item name="android:textStyle">bold|italic</item>
Run Code Online (Sandbox Code Playgroud)

在Android Lollipop(v5.0)中添加 - API 21:

:

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">normal</item>
Run Code Online (Sandbox Code Playgroud)

中斜体:

<item name="android:fontFamily">sans-serif-medium</item>
<item name="android:textStyle">italic</item>
Run Code Online (Sandbox Code Playgroud)

黑色:

<item name="android:fontFamily">sans-serif-black</item>
<item name="android:textStyle">italic</item>
Run Code Online (Sandbox Code Playgroud)

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

  • 如果您有兴趣:[This](https://github.com/android/platform_frameworks_base/blob/dbc51de44fe4f9a7f81528204250de32ec405d39/data/fonts/system_fonts.xml)是定义字体的地方.[本课程](https://github.com/android/platform_frameworks_base/blob/dbc51de44fe4f9a7f81528204250de32ec405d39/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/FontLoader.java)加载字体和[this] ](https://github.com/android/platform_frameworks_base/blob/dbc51de44fe4f9a7f81528204250de32ec405d39/tools/layoutlib/bridge/src/android/graphics/Typeface_Delegate.java)管理他们. (7认同)
  • 哈哈 :DI 实际上在那之前就知道这个网站,所以找到它并不困难。但为了将来参考:我更喜欢使用 developer.android.com 上的搜索而不是 google 搜索,因为您可以将搜索限制为仅 API、博客文章、发行说明等。 (2认同)
  • 另外,有很多别名可以与fontFamily一起使用https://android.googlesource.com/platform/frameworks/base/+/master/data/fonts/fonts.xml (2认同)

New*_*onx 100

可用字体(从奥利奥开始)

预览所有字体

材料设计排版网页,对选择字体和样式的一些字体和建议的演示.

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


使用这些字体

设置android:fontFamilyandroid:textStyle属性,例如

<!-- Roboto Bold -->
<TextView
    android:fontFamily="sans-serif"
    android:textStyle="bold" />
Run Code Online (Sandbox Code Playgroud)

从该表中得到所需的值:

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        |
Run Code Online (Sandbox Code Playgroud)

(Noto Sans是一种后备字体;您不能直接指定它)

注意:此表源自fonts.xml.每个字体的姓氏和样式都列在fonts.xml中,例如

<family name="serif-monospace">
    <font weight="400" style="normal">CutiveMono.ttf</font>
</family>
Run Code Online (Sandbox Code Playgroud)

serif-monospace因此是字体系列,normal是风格.


兼容性

根据fonts.xml和以前的system_fonts.xml日志,您可以看到添加每种字体的时间:

  • 冰淇淋三明治: Roboto常规,粗体,斜体和粗体斜体
  • 果冻豆: Roboto光,浅斜体,浓缩,浓缩粗体,浓缩斜体,浓缩粗斜体
  • 果冻豆MR1: Roboto薄而薄的斜体
  • 棒糖:
    • Roboto中等,中等斜体,黑色和黑色斜体
    • Noto Serif常规,粗体,斜体,粗体斜体
    • Cutive Mono
    • 快来了
    • 跳舞剧本
    • Carrois Gothic SC
    • 诺托桑斯
  • 奥利奥MR1: Roboto浓缩媒介

  • @androiddeveloper我正在查看每行添加的日期.要准确了解特定版本中可用的字体,请查看该版本的system_fonts.xml,例如Lollipop:https://android.googlesource.com/platform/frameworks/base/+/lollipop-release/data/fonts /system_fonts.xml (3认同)
  • 您是如何在日志中找到有关 Android 版本的? (2认同)

tri*_*out 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"));
    }
}
Run Code Online (Sandbox Code Playgroud)

<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" />
Run Code Online (Sandbox Code Playgroud)