如何在styles.xml中指定Roboto-Medium或Roboto-Black?

71
像这篇文章 "如何在Android中更改TextView的字体族所建议的那样,Android 4.2中在styles.xml中可以指定的Roboto字体变种只有以下几种:
  • 常规
  • 斜体
  • 加粗
  • 粗斜体
  • 轻斜体
  • 细体
  • 细斜体
  • 压缩常规
  • 压缩斜体
  • 压缩加粗
  • 压缩粗斜体

这意味着无法使用例如Roboto-Medium或Roboto-Black字体来设置TextView的样式。

但是为什么Google会添加系统范围的字体,不能用于TextView的样式?肯定有一些方法可以在styles.xml中指定所有Roboto字体(即不必将字体作为资源嵌入并在代码中创建自定义TextView)-但是怎么做呢?


1
据我所知,您必须编写自定义的“TextView”或使用“字体”库。 - Nitin Misra
4个回答

99

在 Android 5.0 上,您可以使用 sans-serif-medium 设置 Roboto Medium。

此解决方案取自于 Google iosched 2014,在 Android v21 之前的版本中使用 sans-serif

values/styles.xml

<style name="MyStyle">
    <item name="android:fontFamily">@string/font_fontFamily_medium</item>
</style>

values/fonts.xml

<string name="font_fontFamily_medium">sans-serif</string>

values-v21/fonts.xml

<string name="font_fontFamily_medium">sans-serif-medium</string>

1
不要忘记 font_textStyle_medium - Martynas Jurkus
提醒一下,您需要添加“<!--suppress AndroidDomInspection -->”以避免Android Studio警告您使用整数而不是“textStyle”可用的标志之一。 - CodyEngel

46

新方案

Google I/O '17 之后,您可以在 res/font 文件夹中创建多个字体系列

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
    app:font="@font/roboto_light"
    app:fontStyle="normal"
    app:fontWeight="300" />
<font
    app:font="@font/roboto_bold"
    app:fontStyle="normal"
    app:fontWeight="700" />

</font-family>

而且您可以在任何地方使用

 <style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
    <item name="android:textColor">@color/colorBlack</item>
    <item name="android:fontFamily">@font/font_family_roboto</item>
</style>

font folder font family

旧回答

感谢Jakob Eriksson

原始答案

android:fontFamily="sans-serif"           // roboto regular
android:fontFamily="sans-serif-light"     // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed
android:fontFamily="sans-serif-black"     // roboto black
android:fontFamily="sans-serif-thin"      // roboto thin (android 4.2)
android:fontFamily="sans-serif-medium"    // roboto medium (android 5.0)

在样式中:

<style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_view_text_size</item>
    <item name="android:textColor">@color/black</item>
    <item name="android:fontFamily">sans-serif-light</item>
    <item name="android:textStyle">normal</item>
</style>

在应用程序主题中:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/gray</item>
    <item name="android:textViewStyle">@style/AppTheme.DefaultTextView</item>
</style>

我遇到了一个错误:必须声明“font-family”元素。 - Someone Somewhere
如何使用它们来处理特定元素? - user924
你如何为TextView选择300、400、500、600字体重量?仅使用android:fontFamily是不够的,你还需要指定希望使用的字体,例如thing、light、medium、bold和许多其他字体。Android仅为textStyle属性提供了normal/italic/bold默认值。 - user924

5

Support Library 26引入了在XML中使用字体的功能,并且向后兼容到Android API 14。

要将字体添加为资源,请在Android Studio中执行以下步骤:

  1. 右键单击res文件夹,然后转到New > Android resource directory。 将出现新的资源目录窗口。

  2. 在资源类型列表中选择font,然后单击OK。 注意:资源目录的名称必须为font。

Figure 1. Adding the font resource directory

  1. 将字体文件添加到font文件夹中。 以下文件夹结构生成 R.font.dancing_scriptR.font.lobsterR.font.typo_graphica

Figure 2. Adding the font files in the resource directory

4. 双击字体文件以在编辑器中预览文件的字体。

Figure 3. Previewing the font file

在布局XML文件中,要为TextView设置字体,需要将fontFamily属性设置为您想要访问的字体文件。
<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/lobster"/>

Android Studio的布局预览功能允许您预览TextView中设置的字体。

Figure 4. Previewing fonts in layout preview

要将字体添加到样式中,请打开styles.xml文件,并将fontFamily属性设置为您想要访问的字体文件。

<style name="customfontstyle" parent="@android:style/TextAppearance.Small">
<item name="android:fontFamily">@font/lobster</item>

如果您不想将字体捆绑在应用程序中,您可以随时查看可下载字体

1
这很有帮助,但是OP问的是如何使用系统字体,比如Roboto-Medium等。当字体已经随系统附带时,您肯定不需要混乱地捆绑TTF文件到您的应用程序中或下载它们吧? - LarsH
这里我也在苦苦挣扎,距离最初的帖子已经过去了7年... - jteichert

4

我建议你使用自定义库,例如Android-RobotoTextViewCalligraphy。 使用其中一个库,你可以在xml中设置视图的字体属性,因此可以将其放入styles.xml文件中。而且它们适用于Android 4.0之前的版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接