Android字体资源

  • 1.概述
  • 2.没有Support Library 26库
  • 3.有Support Library 26库
    • 3.1.下载字体
      • 3.1.1.语法
      • 3.1.2.示例

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中使用:

        TextView mTV = 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!" />

更多相关文章

  1. android之Activity基本跳转
  2. 还在用枚举?我早就抛弃了!(Android(安卓)注解详解)
  3. Android(安卓)Studio与CMake
  4. ffmpeg2.2在ubuntu下使用NDK编译——并在android工程下测试使用
  5. Android(安卓)SDK和ADT无法更新的解决办法
  6. Xamarin Android(安卓)绑定jar库同时将so库打包进去
  7. android SDK下各目录的用途,以及在不同系统下哪些是通用的。
  8. 第四章 探索Android(安卓)SDK
  9. [转载]Android实现更换皮肤功能

随机推荐

  1. BSD系统正在死亡?一些安全研究人员这样认
  2. 闪存(SSD)技术,MLC和SLC差距到底有多大?
  3. 做项目,如同斗地主,玩得就是心跳!
  4. Gartner:政府CIO将在2018年增加云、网络安
  5. pmp是什么意思?pmp值得学吗?
  6. 一文深入理解快照技术
  7. 双活距离太远为啥用波分,容灾链路设计关键
  8. Kubernetes集群组件的安全
  9. 知识干货: GPU关键参数和应用场景
  10. Linus Torvalds 称英特尔的补丁为“垃圾