71

像这样的帖子如何在 Android 中更改 TextView 的 fontFamily建议,您可以在 Android 4.2 的 styles.xml 中指定的 Roboto 字体变体归结为以下内容:

  • 常规的
  • 斜体
  • 大胆的
  • 加粗斜体
  • 浅斜体
  • 薄的
  • 细斜体
  • 浓缩正则
  • 浓缩斜体
  • 浓缩粗体
  • 浓缩粗斜体

这就排除了使用例如样式设置 TextViews 的能力。Roboto-Medium 或 Roboto-Black 字体。

但是,为什么 Google 会添加不能用于设置 TextView 样式的系统范围字体呢?当然,必须有某种方法可以从 styles.xml 中指定所有 Roboto 字体(即,不必将字体作为资产嵌入并在代码中创建自定义 TextView)——但是如何?

4

4 回答 4

99

在 Android 5.0 上,您可以使用sans-serif-medium.

此解决方案取自Google iosched 2014,用于sans-serifAndroid pre-v21:

值/样式.xml

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

值/字体.xml

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

值-v21/fonts.xml

<string name="font_fontFamily_medium">sans-serif-medium</string>
于 2014-10-24T09:47:09.190 回答
45

新解决方案

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>

字体文件夹 字体系列

旧答案

感谢雅各布·埃里克森

原始答案

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>
于 2017-03-21T12:55:45.887 回答
5

支持库 26使用 XML 中的字体引入,并且向后兼容 Android API 14。

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

  1. 右键单击 res 文件夹并转到新建 > Android 资源目录。将出现新建资源目录窗口。

  2. 在资源类型列表中,选择字体,然后单击确定。注意:资源目录的名称必须是字体。

图 1. 添加字体资源目录

  1. 在字体文件夹中添加您的字体文件。下面的文件夹结构生成R.font.dancing_scriptR.font.lobsterR.font.typo_graphica

图 2. 在资源目录中添加字体文件

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

图 3. 预览字体文件

要设置 的字体TextView,在布局 XML 文件中,将 fontFamily 属性设置为要访问的字体文件。

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/lobster"/>

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

图 4. 在布局预览中预览字体

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

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

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

于 2017-12-14T03:52:41.503 回答
4

我建议您使用自定义库,如Android-RobotoTextViewCalligraphy。使用其中之一,您可以使用属性在 xml 中设置视图的字体,以便您可以放入 styles.xml 。它们适用于 4.0 之前的 Android 版本

于 2014-08-18T09:48:49.900 回答