协慌网

登录 贡献 社区

如何在 Android 中更改 TextView 的 fontFamily

因此,我想android:fontFamily ,但在 Android 中看不到任何预定义的字体。如何选择预定义的之一?我真的不需要定义自己的 TypeFace,但是我所需要的只是与现在显示的有所不同。

<TextView
    android:id="@+id/HeaderText"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="52dp"
    android:gravity="center"
    android:text="CallerBlocker"
    android:textSize="40dp"
    android:fontFamily="Arial"
 />

看来我在那儿所做的并没有真正的用!顺便说一句android:fontFamily="Arial"是一个愚蠢的尝试!

答案

从 android 4.1 / 4.2 / 5.0 起,可以使用以下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-black"     // roboto black
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"

这 16 种变体是可能的:

  • 机械手常规
  • 斜体
  • Roboto 粗体
  • Roboto 粗体斜体
  • 机器人光
  • Roboto-Light 斜体
  • 机械薄型
  • Roboto-Thin 斜体
  • 浓缩的机器人
  • Roboto 压缩斜体
  • 机械手浓缩黑体
  • Roboto 压缩的粗体斜体
  • 机器人黑
  • Roboto-Black 斜体
  • 机械人
  • 斜体斜体

fonts.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="font_family_light">sans-serif-light</string>
    <string name="font_family_medium">sans-serif-medium</string>
    <string name="font_family_regular">sans-serif</string>
    <string name="font_family_condensed">sans-serif-condensed</string>
    <string name="font_family_black">sans-serif-black</string>
    <string name="font_family_thin">sans-serif-thin</string>
</resources>

这是通过编程方式设置字体的方法:

TextView tv = (TextView) findViewById(R.id.appname);
Typeface face = Typeface.createFromAsset(getAssets(),
            "fonts/epimodem.ttf");
tv.setTypeface(face);

将字体文件放在资产文件夹中。就我而言,我创建了一个名为 fonts 的子目录。

编辑:如果您想知道您的资产文件夹在哪里,请参阅此问题

从 Android-Studio 3.0开始,它非常容易更改字体系列

使用支持库 26,它将在运行 Android API 版本 16 及更高版本的设备上运行

res目录下创建一个文件夹font下载所需的字体并将其粘贴到font文件夹中。结构应该像下面这样

这里

注意:自 Android 支持库 26.0 起,您必须声明两组属性(android:和 app:),以确保字体在运行 Api 26 或更低版本的设备上加载。

现在,您可以用改变字形布局

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

编程方式更改

Typeface typeface = getResources().getFont(R.font.myfont);
   //or to support all versions use
Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);
 textView.setTypeface(typeface);

要使用 styles.xml更改字体,请创建样式

<style name="Regular">
        <item name="android:fontFamily">@font/dancing_script</item>
        <item name="fontFamily">@font/dancing_script</item>
        <item name="android:textStyle">normal</item>
 </style>

并将此样式应用于TextView

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    style="@style/Regular"/>

您还可以创建自己的字体系列

-右键单击字体文件夹,然后转到 “新建”>“字体资源文件” 。出现 “新资源文件” 窗口。

-输入文件名,然后单击 “确定” 。新的字体资源 XML 在编辑器中打开。

例如,在此处编写您自己的字体系列

<font-family xmlns:android="http://schemas.android.com/apk/res/android">
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/lobster_regular" />
    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/lobster_italic" />
</font-family>

这只是一个特定 fontStyle 和 fontWeight 到字体资源的映射,该字体资源将用于呈现该特定变体。 fontStyle 的有效值为 normal 或 italic;并且 fontWeight 符合CSS font-weight 规范

1.更改布局中的字体家族,您可以编写

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

2.编程方式进行更改

Typeface typeface = getResources().getFont(R.font.lobster);
   //or to support all versions use
Typeface typeface = ResourcesCompat.getFont(context, R.font.lobster);
 textView.setTypeface(typeface);

更改整个 App 的字体,请在 AppTheme 中添加这两行

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
     <item name="android:fontFamily">@font/your_font</item>
     <item name="fontFamily">@font/your_font</item>
  </style>

有关更多信息,请参见文档,Android 自定义字体教程。