XML字体配置

2023-11-09

一、前言

在以往的开发中,开发者都是将字体文件放在assets目录下,在程序运行时加载并设置到TextView中,自从Android 8.0(API level 26)开始,支持将字体文件放在res资源中,添加XML字体配置,可以在layout布局文件中直接使用。

PS: 说到这,肯定又有人在想Android 8.0(API level 26)才开始有,这个适配性差。放心,Google早已经考虑到这一点,提供了支持库(需要26及以上版本),可以在Android 4.1 (API level 16)及以上系统上使用这新颖的做法。

二、XML字体配置

需要在XML中引用字体文件,那么就需要将字体文件放到项目的res资源目录下,这些字体文件会被编译到R.java文件中,作为资源被引用。font是在Android 8.0开始的一种新的资源类型。

  • 将字体文件作为资源添加到项目中的步骤如下:
  1. res目录下新建font目录(如果是使用AndroidStudio,在res目录下右键,New > Android resource directory,然后选择类型为font);
  2. 将字体文件拷贝到res/font目录下(字体命名规则要符合Android资源文件命名规则,如果在AndroidStudio中,双击字体可以预览字体);
  3. 引用字体文件。

2.1 创建字体系列(font family)

字体系列(font family)是拥有自己样式和权重的字体集合。在Android中,你可以通过XML资源创建一个新的字体系列,并当做单独的资源来访问。相比单独引用字体资源并设置每个字体的样式和权重的做法,使用字体系列,系统能够根据文本的样式更准确地选择你想要使用的字体。

  • 创建字体系列的步骤如下:
  1. 在资源目录res/font下新建XML文件;
  2. 在新建的XML文件中,添加<font-family>根节点,并在根节点内部添加<font>节点,引用字体文件并配置属性。
<?xml version="1.0" encoding="utf-8"?>
<font-family>
    <font
        android:fontStyle="normal"
        android:fontWeight="400"
        android:font="@font/cooper_black_std" />

    <font
        android:fontStyle="italic"
        android:fontWeight="400"
        android:font="@font/cooper_black_std_italic" />
</font-family>

2.2 在XML中使用字体资源

在XML中TextView或者它的样式声明中,可以通过fontFamily属性引用字体资源,包括单独的字体和字体系列。

如果使用字体系列,TextView会根据实际情况需要,自动切换字体系列中声明的字体。

  • TextView中使用字体资源
<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fontFamily="@font/copper_black_std_family"/>
  • 在样式声明中使用字体资源
    values/styles.xml中添加样式声明,并添加android:fontFamily属性
style name="copperBlackStdFontStyle" parent="@android:style/TextAppearance.Small">
    <item name="android:fontFamily">@font/copper_black_std_family</item>
</style>

2.3 在编码中使用字体资源

在代码中,通过调用Resources对象的getFont(int)方法并传入字体资源唯一id进行获取,这个方法返回Typeface类型对象,通过调用TextViewsetTypeface(Typeface)方法设置字体,当然,你也可以使用setTypeface(Typeface, int)方法设置特定样式的字体。

说明:如果使用的是字体系列,TextView会自动选择样式。

val typeface = resources.getFont(this, R.font.copper_black_std_family)
tvMsg.typeface = typeface

2.4 使用支持库实现

  • 支持库实现XML字体配位置
    使用支持库实现XML字体,在XML字体配置上,跟上面提到的差不多,在创建字体系列时,需要引入命名空间才能使用。
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font
        app:fontStyle="normal"
        app:fontWeight="400"
        app:font="@font/cooper_black_std" />

    <font
        app:fontStyle="italic"
        app:fontWeight="400"
        app:font="@font/cooper_black_std_italic" />
</font-family>
  • 在代码中引用字体资源
    在低于Android 8.0(API level 26)中,Resources中没有getFont(int)方法,那么需要通过支持库提供的API获取字体资源,那就是ResourcesCompat.getFont(int),除此之外,其他的都一致。
val typeface = ResourcesCompat.getFont(this, R.font.copper_black_std_family)
tvMsg.typeface = typeface
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

XML字体配置 的相关文章

随机推荐

  • OpenWrt设置开机自动启动/延迟启动

    最近在搞路由器自动登录 用到了OpenWrt的自动启动 因为我要运行的是一个Python程序 一条命令足够 就直接在 etc rc local里面改了 python etc Myprogram py 直接占用前台了 既需要让他后台运行 又不
  • python计算定积分

    求 0 1
  • 外部保存echars图片

    传递图表容器id function downloadImpByChart chartId var myChart echarts getInstanceByDom document getElementById chartId var ur
  • 浅谈当下火热的ChatGPT

    ChatGPT这个词语从今年初发布以来 一度成为一个火热的概念 包括CSDN也推出了C知道 不少大佬博友纷纷蹭热点 发布了无数关于ChatGPT的技术 使用 技能 展望未来的文档和博文 其实很多文章我都没有看过 只知道当下这个工具非常的火
  • 快速入门Spring Cloud Hystrix(服务降级、服务熔断、服务监控)

    文章目录 前言 一 服务雪崩 1 服务雪崩概述 2 造成服务雪崩的原因 3 如何防止雪崩 二 Spring Cloud Hystrix 1 什么是Spring Cloud Hystrix 豪猪哥 2 搭建测试环境 1 创建cloud pro
  • Java 23种设计模式通俗理解

    文章目录 工厂方法 建造者模式 抽象工厂 原型模式 单态模式 适配器模式 桥梁模式 合成模式 装饰模式 门面模式 享元模式 代理模式 责任链模式 命令模式 解释器模式 迭代模式 调停者模式 备忘录模式 观察者模式 状态模式 策略模式 模板方
  • 刀具半径补偿 c语言,数控铣床编程时刀具半径补偿指令及运用

    摘要 本文分析了刀具半径补偿概念及指令 如何灵活和合理地运用刀补值 正确编制加工程序以保证数控加工的有效性和准确性等问题 关键词 数控铣床编程 刀具半径补偿指令 一 刀具半径补偿的概念 在数控铣床上进行轮廓加工时 由于铣刀的刀位点通常是定在
  • mysql查询语句提示Unknown column ‘xxx’ in ‘where clause’

    今天写接口自动化测试 在运行结果中提示Unknown column xxx in where clause 的问题 经过大神的指导 顿时明白其中缘由 如果sql中定义的类型是int型的可以不用加引号 但是如果是字符串类型的 必须加引号 例如
  • C++&QT day1

    思维导图
  • CTF(Web方向练习题)(持续更新)

    1 Training WWW Robots 打开应用场景 如下 网址后面添加 robots txt 查看其中内容 robots协议也叫robots txt 统一小写 是一种存放于网站根目录下的ASCII编码的文本文件 内容如下 根据提示 访
  • numpy.random.choice坑

    numpy random choice 默认是有放回 其中有个 replace 的参数控制 默认是 True 如划分数据集用到 注意重复 Code import numpy as np a np arange 5 print a for i
  • Go-Gateway反向代理,性能比拼Nginx

    前言 在以前的一篇文章 基于Fasthttp实现的Gateway 性能媲美Nginx 中 介绍给大家一款使用Go语言开发的实现反向代理功能的开源项目boot4go gateway boot4go gateway项目以fasthttp作为ht
  • gcc入门及合并静态库

    1 gcc入门 1 gcc即是linux下c c 的编译器 gcc经常用的的选项有 c o c表示只编译 compile 源文件但不链接 会把 c或 cc的c源程序编译成目标文件 二进制文件 一般是 o文件 o用于指定输出 out 文件名
  • C++:内联函数

    1 概念 以inline修饰的函数叫做内联函数 编译时C 编译器会在调用内联函数的地方展开 没有函数调用建立栈帧的开销 内联函数提升程序运行的效率 加inline与未加inline的效果可以通过反汇编查看 由于我使用的是VS2022 我先介
  • VScode使用之搭建linux开发环境

    使用SSH链接linux VScode链接的方法参考如下文章 VScode使用之ssh链接虚拟机 安装C C 插件 安装CMake插件 使用CMake构建项目 新建工程文件夹 main c inc fun h src fun c 快捷键Ct
  • 创建表 DATE类型 DEFAULT默认值

    date类型直接用CURRENT TIMESTAMP或curdate 会报错 是因为在MySQL默认你输入的是一个常量 而不能是一个表达式 如果必须要使用表达式则应该将该表达式整个用小括号包括起来 curdate DDL语句显示如下 参考
  • 【满分】【华为OD机试真题2023B卷 JAVA&JS】乱序整数序列两数之和绝对值最小

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 乱序整数序列两数之和绝对值最小 知识点排序数组 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 给定一个随机的整数 可能存在正整数和负整数 数组 nums 请你在该数组
  • Ubuntu 虚拟机无法连接网络、不显示网络图标、没有网络设置

    Ubuntu20 无法连接网络 不显示网络图标 没有网络设置 出现的问题 在VMWare中使用Ubuntu系统时 通常需要设置网络连接但是有时会出现问题 右上角的网络连接的小图标不见了 网络也没有连接 ifconfig也看不到网卡 解决办法
  • Vue2面试题100问

    Vue2面试题100问 Vue2面试题100问 1 简述一下你对Vue的理解 2 声明式和命令式编程概念的理解 3 Vue 有哪些基本特征 4 vue之防止页面加载时看到花括号解决方案有哪几种 5 Vue中v for与v if能否一起使用
  • XML字体配置

    文章目录 一 前言 二 XML字体配置 2 1 创建字体系列 font family 2 2 在XML中使用字体资源 2 3 在编码中使用字体资源 2 4 使用支持库实现 一 前言 在以往的开发中 开发者都是将字体文件放在assets目录下