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中按照以下步骤执行:
- 右键单击res文件夹,然后点击 New > Android resource directory,将显示”New Resource Directory”窗口
在Resource type(资源类型)列表中,选择font(字体),然后单击”ok”。
注意:资源目录的名称必须是font。
在字体文件夹中添加字体文件
下面的文件夹结构生成R.font.dancing_script,R.font.lobster和R.font.typo_graphica
双击字体文件,在编辑器中预览文件的字体
创建一个font_family
font_family是一组字体文件及其样式和重量详情。在Android中,可以创建一个新的font_family作为XML资源,并将其作为一个单独的资源来访问,而不是将每个样式和重量作为单独的资源引用。通过这样做,系统可以根据想要使用的文本样式来选择正确的字体。
要创建一个字体系列,在Android Studio中按照以下步骤执行:
右键单击font文件夹,然后转到New > Font resource file,将会显示New Resource File窗口
- 输入文件名称,然后点击ok
在元素中附加每个字体文件的样式和权重属性。以下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的字体。
- 点开TextView的”Attribute”窗口
展开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);