Android 8.0 新特性(二) - XML中的字体

android oreo
原文地址:Fonts in XML

Android 8.0(API 26)引入了一个新特性,即XML中的字体,可以将字体作为资源使用。可以将字体文件添加到res/font文件夹中,以作为字体资源。这些字体作为R文件进行编译,并可在Android Studio中自动使用它。通过新的资源类型 - font,可以访问字体资源。例如,要访问字体资源,可以使用@font/myfont或者R.font.myfont。

Support 26支持该特性,Android API的最低版本为14.

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

  1. 右键单击res文件夹,然后点击 New > Android resource directory,将显示”New Resource Directory”窗口
  2. 在Resource type(资源类型)列表中,选择font(字体),然后单击”ok”。

    注意:资源目录的名称必须是font。

    这里写图片描述

  3. 在字体文件夹中添加字体文件

    下面的文件夹结构生成R.font.dancing_script,R.font.lobster和R.font.typo_graphica

    这里写图片描述

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

    这里写图片描述

创建一个font_family

font_family是一组字体文件及其样式和重量详情。在Android中,可以创建一个新的font_family作为XML资源,并将其作为一个单独的资源来访问,而不是将每个样式和重量作为单独的资源引用。通过这样做,系统可以根据想要使用的文本样式来选择正确的字体。

要创建一个字体系列,在Android Studio中按照以下步骤执行:

  1. 右键单击font文件夹,然后转到New > Font resource file,将会显示New Resource File窗口

    这里写图片描述

  2. 输入文件名称,然后点击ok
  3. 在元素中附加每个字体文件的样式和权重属性。以下XML说明了在字体资源XML中,添加与字体有关的属性:

在XML布局中使用字体

在TextView或样式中使用单个字体文件或font familay中的字体。使用fontFamily属性,将字体添加到TextView或样式中。

注意:当使用font familay时,TextView会根据需要自行切换使用font familay的字体。

将字体添加到TextView

要设置TextView的字体,可以这么做:

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

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:fontFamily="@font/lobster"/>
    
  • 打开”Attribute”窗口设置TextView的字体。

    1. 点开TextView的”Attribute”窗口
    2. 展开textAppearance属性,然后从fontFamily列表中选择字体

在下图中, 最右边的窗格中显示的Android Studio布局预览,可以预览TextView中设置的字体

将style中字体

打开styles.xml,并将fontFamily属性设置为要访问的字体文件。

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

以编程方式使用字体

要以编程方式检索字体,请调用getFont()方法,并提供要检索的字体的资源标识符。此方法返回一个Typeface对象。虽然系统可以从字体信息中选择最佳风格,但可以使用setTypeface(android.graphics.Typeface,int)方法设置具有特定样式的字体。

Typeface typeface = getResources().getFont(R.font.myfont);
textView.setTypeface(typeface);

使用支持库

使用Support Library 26支持运行Android API 14以上版本的设备上使用该特性 - 在XML中的设置字体。

当通过支持库声明XML布局中的font_family时,应使用app命名空间,比如,app:fontStyle=”normal”。

注意:从Android Support Library 26开始,在创建font_family时时,必须声明两组属性,以确保在运行Android 8.0(API 26)或更低版本的设备上加载字体。

<?xml version="1.0" encoding="utf-8"?>
<font-family 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <font
        android:font="@font/myfont-Regular"
        android:fontStyle="normal"
        android:fontWeight="400"
        app:font="@font/myfont-Regular"
        app:fontStyle="normal"
        app:fontWeight="400" />
    <font
        android:font="@font/myfont-Italic"
        android:fontStyle="italic"
        android:fontWeight="400"
        app:font="@font/myfont-Italic"
        app:fontStyle="italic"
        app:fontWeight="400" />
</font-family>

要以编程方式检索字体,需调用ResourceCompat.getFont(Context,int)方法,并提供Context和资源标识符的实例。

Typeface typeface = ResourcesCompat.getFont(context, R.font.myfont);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值