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

在这个问题的答案中,用户列出了android:fontFamily和12个变体的值(见下文)。 这些价值从何而来? android:fontFamily的文档没有在任何地方列出这些信息(我在这里查过 , 在这里 )。 这些string在各个位置的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),并删除所有在我看看文件之前创build的一些样式的冗余。

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

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

可用字体(来自牛轧糖)

预览所有字体

你可以在http://developer.android.com/design/style/typography.html阅读更多关于这些字体的信息。;

fonts.xml是Android字体的fonts.xml和不断扩展的列表。


使用这些字体

要使用这些字体之一,请查看fonts.xml并查找字体的系列名称。 例如,要使用Cutive Mono,来自fonts.xml的相关代码片段就是

 <family name="serif-monospace"> <font weight="400" style="normal">CutiveMono.ttf</font> </family> 

serif-monospace就是这个姓氏。 在您的TextView或样式中指定该姓氏,例如

 <TextView android:fontFamily="serif-monospace" android:textStyle="italic" /> 

或者只是使用这个表格:

 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 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和之前的system_fonts.xml的日志 ,可以看到每个字体的添加时间:

  • 冰淇淋三明治: Roboto定期,大胆,斜体和粗体斜体
  • 果冻豆: Roboto轻,斜体,浓缩,浓缩大胆,浓缩斜体,浓缩粗体斜体
  • 果冻豆MR1: Roboto薄薄的斜体
  • 棒糖:
    • Roboto中等,中等斜体,黑色和黑色斜体
    • 诺托塞里夫定期,大胆,斜体,大胆的斜体
    • 网罗
    • 快来了
    • 舞蹈剧本
    • Carrois哥特式SC
    • Noto Sans

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