Android字体资源
原创
©著作权归作者所有:来自51CTO博客作者WongKyunban的原创作品,请联系作者获取转载授权,否则将追究法律责任
Android字体资源
1.概述
Android 8.0 (API 26)提供了一个新特性,即在xml定义字体。意味着字体作为一种资源的形式存在。我们将字体文件(.ttf或.otf)添加到res/font/
文件夹中,将字体捆绑为资源。这些字体会在R 文件中被编译,并在 Android Studio 中自动提供。我们可以通过@font/myfont
在布局文件中使用,或R.font.myfont
在Java中使用。为了能够在Android 4.1(API 16)的设备上使用这个新特性,我们的应用app要加入Support Library 26库。
那么我们以是否有Support Library 26库作为分界线来讨论字体的使用问题。
2.没有Support Library 26库
新建Assets及fonts目录,并将字体文件拷贝到fonts目录下

在java代码中使用:
TextView mTV = findViewById(R.id.tv);
Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/华文彩云.TTF");
mTV.setTypeface(typeface);
3.有Support Library 26库
新建资源目录font,并将字体文件拷贝到font目录下:
(注意 :资源文件名都要求用小写的英文字命名)

在布局文件中使用:
<TextView
android:fontFamily="@font/pop"
android:id="@+id/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
在java中使用:
= findViewById(R.id.tv);
Typeface typeface = ResourcesCompat.getFont(this,R.font.pop);
mTV.setTypeface(typeface);
3.1.下载字体
这种方式是不把字体文件放在本地,而是在需要时,去网络上请求。
3.1.1.语法
<?xml version="1.0" encoding="utf-8"?>
<font-family
android:fontProviderAuthority="authority"
android:fontProviderPackage="package"
android:fontProviderQuery="query"
android:fontProviderCerts="@[package:]array/array_resource" />
- android:fontProviderAuthority:必需。定义字体请求的字体提供程序的授权。
- android:fontProviderPackage:必需。要用于请求的字体提供程序的软件包名称。此属性用于验证提供程序的身份。
- android:fontProviderQuery:必需。字体的字符串查询。
- android:fontProviderCerts:数组资源。必需。定义用于为此提供程序签名的证书的哈希集。此属性用于验证提供程序的身份,仅当提供程序不属于系统映像的一部分时才是必需的。该值可以指向单个列表(字符串数组资源)或列表的列表(数组资源),其中每个单独的列表代表一个签名哈希集合。
3.1.2.示例
保存于 res/font/lobster.xml
的 XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
android:fontProviderAuthority="com.example.fontprovider.authority"
android:fontProviderPackage="com.example.fontprovider"
android:fontProviderQuery="Lobster"
android:fontProviderCerts="@array/certs">
</font-family>
定义证书数组的 XML 文件保存在 res/values/
中:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="certs">
<item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
</string-array>
</resources>
应用字体:
<?xml version="1.0" encoding="utf-8"?>
<EditText
android:fontFamily="@font/lobster"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, World!" />