关于字体设置的属性及替换方式,可以参考如下文章:

  • Android字体系列 (一):Android字体基础
  • Android字体系列 (四):全局替换字体方式
  • Android官方文档-XML 中的字体
    以上文章已经详细介绍如何更换字体了,本文仅介绍字体更换的操作及注意事项。

全局更换字体操作流程

  1. 字体放置到 res/font 目录
    如使用思源黑体 font/noto_sans_sc.otf
  2. 主题中使用 android:fontFamily 指定字体
<item name="android:fontFamily">@font/noto_sans_sc</item>
  1. 将主题应用到 Activity

其他情况处理

完成上一步之后,对应的Activity,包括其中弹出的Dialog中的文本的字体就已经更改了,但是实践中有一些其他情况需要处理。

Toast 字体替换

使用自定义Toast,然后设置其中 TextView 的字体

       Typeface font = null;try {font = ResourcesCompat.getFont(context, sCustomFontResId);} catch (Resources.NotFoundException ignore) {Log.e("ToastUtils", "customFont not found: " + sCustomFontResId);}if (font != null) {view.setTypeface(font);view.setIncludeFontPadding(false);}Toast  toast =  new Toast(context);toast.setView(view);

思源黑体的 fontPadding 处理

发现使用思源黑体之后,TextView 的垂直边距及行间距出现了问题:

  1. 上下边距变宽;
  2. 换行后文本行间距变窄;

对于上述问题,解决方案如下:

  1. 上下边距变宽;
    在主题中加入 android:includeFontPadding 的配置,将其值设置为 false
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:fontFamily">@font/noto_sans_sc</item><item name="android:includeFontPadding">false</item>
</style>
  1. 换行后文本行间距变窄;
    发现是早期的思源黑体字体的问题,下载使用较新版本的 思源黑体 不存在此问题;

字体变体加载过多导致内存溢出问题处理

部分字体存在多种不同字重,如思源黑体存在7中字重的文件,如果全部加载到内存中,则部分VM内存较小的设备会直接OOM崩溃,故只引入normal字重(400)的字体

总结

  1. 引入字体
    noto_sans_sc_regular 字体文件拷贝到res/font 目录,并添加 noto_sans_sc.xml 的字体定义文件:
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:tools="http://schemas.android.com/tools"xmlns:app="http://schemas.android.com/apk/res-auto"tools:ignore="ResourceName"><fontapp:font="@font/noto_sans_sc_regular"app:fontStyle="normal"app:fontWeight="400"/>
</font-family>

需要使用 app 的 namespace 确保向下兼容性

  1. 主题配置
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><item name="android:fontFamily">@font/noto_sans_sc</item><item name="android:includeFontPadding">false</item>
</style>
  1. 其他 TextView 字体替换
ResourcesCompat.getFont(context, sCustomFontResId)
view.setTypeface(font);
view.setIncludeFontPadding(false);

Android APP 全局字体替换-思源黑体相关推荐

  1. android 自动替换资源文件,简单高效的实现Android App全局字体替换

    Android O推出了一项新的功能「Fonts in XML」,借助这项功能,我们能够像使用其他资源文件一样使用字体,比较方便地实现App全局字体的替换. 为了能够在API 14或者以上的设备上使用 ...

  2. android app全局字体,Android app全局字体设置

    相信很多对设计追求极致的开发者们对Android系统的默认字体都会感到不满意,这个时候需要使用自定义的字体,当然可以使用系统提供的Typeface来加载自定义字体,但是,一个个TextView的设置, ...

  3. Android APP全局黑白化实现方案

    作者:小帅 链接:https://zhuanlan.zhihu.com/p/587516253 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在清明节时各大APP都 ...

  4. android+字体样式包,android 改变全局字体样式(第三方字体包)

    android 改变全局字体样式 参考:http://stackoverflow.com/questions/2711858/is-it-possible-to-set-font-for-entire ...

  5. 太激动!Android修改全局字体样式,替换整个APP字体

    最近一直在如何全局修改app字体上困惑着,今天终于有了突破.我将搜集的资料进行了整理,现在提供给大家. 前面为分析,建议直接翻到最后看[个人中心设置]. 参考链接: Android应用使用自定义字体 ...

  6. MIUI 10 Android 原生字体,[教程] MIUI10全局字体替换教程,了解一下?

    全局字体更改前提条件: 1.解BL锁 2.完整ROOT 更改需要: 1.你的手机(这句废话,请自行忽略) 2.RE管理器或MT管理器(推荐MT管理器,之后授予ROOT权限) 3.你想更换的字体包 声明 ...

  7. Android APP开发字体更换

    Android开发更换APP中的字体 今天来一起学习学习如何更换开发中的字体,开门见山: 右键点击main--->new--->Folder--->Assets Folder(简单地 ...

  8. android 禁止跟随系统字体,Android 应用全局字体调节或禁止随系统字体大小更改...

    1.禁止跟随系统字体大小调节 在Application中复写getResources()方法 @Override public Resources getResources() {//还原字体大小 R ...

  9. Android App修改字体大小,且不随系统字体大小更改

    在做混合开发时发现,无论是APP内的字体大小,还是前端的字体大小,都会随着系统字体大小发生变化.当遇到老人字体(特大号字体)时,有些页面的布局就乱掉了.而玩过游戏的都知道,所有游戏APP的字体都不会随 ...

  10. 改Android app字体,Android APP自定义字体大小修改

    简单记录下今天做的自定义字体大小修改的功能 需求:添加具体字体自定义大小功能.不需要跟随系统字体大小改变而改变 1.首先看一下用到的调节字体大小的控件: 字体大小调节页 控件继承自系统的SeekBar ...

最新文章

  1. SLAM笔记(五)光束平差法(Bundle Adjustment)
  2. 4412 GPIO读 和 ioremap控制GPIO寄存器
  3. 安卓盒子运行 linux,全志 Allwinner A20 机顶盒刷入原生 Debian
  4. android 关闭多点触控_Cocos Creator关闭多点触摸的问题
  5. asp调用php函数,asp函数split()对应php函数explode()
  6. MPEG1 Audio介绍
  7. MySQL不能插入中文字符及中文字符乱码问题
  8. 实验4 贪心法(作业调度问题)
  9. FastReport.NET 中使用二维码
  10. java 算法优化向导
  11. 快速傅里叶变换(FFT)——按时间抽取DIT的基
  12. 修改数据库参数oracle,Oracle 修改数据库基本参数
  13. Shiro之UsernamePasswordTokenRememberMeAuthenticationTokenAuthenticationToken
  14. JEECG开源社区招收学生说明
  15. 苹果官方指南:Cocoa框架(2)(非原创)
  16. 解决 Oracle TNSListener 服务启动找不到路径问题
  17. HighCharts/Highstock使用小结,使用汉化及中文帮助文档
  18. hadoop漏洞_【漏洞公告】CVE-2017-7669:Apache Hadoop远程权限提升漏洞
  19. exception e 是泛类吗_Spring异步编程 | 你的@Async就真的异步吗?异步历险奇遇记
  20. mac m1 eclispe安装暗黑主题

热门文章

  1. 汇编语言程序设计 实验6 分支程序设计
  2. yolo标注文件转换工具,python做的
  3. Arch Linux下 让MPlayer用上CoreAVC1.7.0.0解码器
  4. 冰雪传奇刷怪计时器_冰雪传奇BOSS计时器
  5. 基于jsp的网上书店_[内附完整源码和文档] 基于JSP网上零食销售系统的设计与实现...
  6. 51单片机应用行列反转法操纵矩阵键盘
  7. 程序员深度学习!mysql客户端工具免费绿色版
  8. 常见的几款js跳转代码
  9. oracle中isnumber函数,Oracle 函数isnumber问题
  10. ORACLE常用函数汇总