Android 8.0 新特性(二)

来源:互联网 发布:python自动登录网页 编辑:程序博客网 时间:2024/05/23 07:23

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);
原创粉丝点击