版权声明:

本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。

每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章。

未经允许,不得转载。

在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究。

那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我决定将它们拆分一下,分几篇来详细的讲解(可能是五篇)。主要会是一些常用的替换字体的方案,最后还会介绍一些全局替换的方案,当然也会包含最新的 『Fonts in XML』的方案。

期待你持续关注。

一、开篇

因为 Android 字体相关的内容还比较多的。有时候其实我们只需要调整一下属性就可以满足设计师的需求,或者是一个退后的方案(毕竟有发版的时间卡住了),有一些效果可以大概满足需求。

那么本文就先介绍一下再 Android 下原生内置的一些字体的一些基本概念和使用。

需要注意的是,内置的一些字体只对英文有效。

二、Android 的默认字体

Android 系统默认使用的是一款叫做 Robote 的字体。Robote 本身就是 Google 自己的字体格式,Android 和 Chrome 操作系统上,默认都会使用 Robote 字体,并且也是 Google 视觉语言推荐的字体。

想要了解更多关于 Robote 的内容,可以去 Google 的网站上查看。

https://fonts.google.com/specimen/Roboto

正常来说,Robote 就已经提供了多种的选择,例如:粗细、斜体 等等。但是通常它并不能满足我们设计师的需要。

接下来看看当我们想要使用 Android 内置的一些字体的时候,我们需要使用哪些属性。

三、哪些属性可以影响字体

Android 本身已经提供了一些修改字体样式的属性和方法。

当你想要修改字体的时候,你将面对三个属性,它们都有对应的 Java 方法。

  • android:textStyle
  • android:typeface
  • android:fontFamily

下面来分别详细的说明这几个属性。

3.1 android:textStyle

textStyle 主要用于设定一些字体的样式,它是对所有的字体都生效的。也就是说哪怕你替换了字体,依然可以使用 textStyle 来修饰它的样式。textStyle 本身支持的可选项有 normal|bold|italic,它们也非常的好理解,就是普通|粗体|斜体

可以看到,字体是不受 textStyle 影响的,这里影响的只有它的样式。

3.2 android:typeface

typeface 可以用于设置一些默认的字体,它可选的属性有 normal|sans|serif|monospace 等。normal 和 sans 的字体其实是一样的,serif 是一个带衬线的字体,而 nonospace 是等宽字体。

光这样说,其实也无法理解它们,直接上效果图比较能说明问题。

可以看到 serif 在默认的字体上,增加了衬线。而 nonospace 限制了每个字符的宽度,让它们达到一个等宽的效果。

等宽其实很好理解,衬线到底是什么意思?这里引用维基百科的一张图,就能很直观的说明问题。

衬线其实就是字体边缘的那一点点小啾啾。

3.3 android:fontFamily

fontFamily 看着像是对 typeface 的一次加强,从它的可选项就能看出来,它更细致的区分了字体的样式。

fontFamily 的可选项还是很多的,这里就不一一列举了。不过需要注意,有一些字体的设置是有版本限制的。

例如:sans-serif-medium 是需要 Android 5.0 的版本才支持的。

下面直接举几个例子看看效果了:

需要注意的是,如果同时配置了 typefacefontFamily ,将使用 fontFamily 配置的字体。

而除了 typefacefontFamily 会有冲突之外,它们俩都是可以配合 typeStyle 属性一起使用的,也就是说,这里配置的字体,都是可以再加粗或者加斜体。

四、利用主题修改全局字体

如果你能说服你的设计师,接受系统字体的话,你可以在 Theme 中,去配置你需要的默认字体。

在 application 中,通过 android:theme 来配置一个 App 的主题。一般新创建的项目,都是 @style/AppTheme 。在其中追加关于字体的属性 android:fontFamily,它就可以完成对全局设置一个系统字体。当然你可以对一个单独的 TextView 配置一个特别的字体,都是可以接受的。

五、使用自定义字体

有时候,Android 系统默认的字体已经无法满足我们的需求了,这个时候我们就会需要使用一些定制的特殊字体。

关于字体,这里推荐两个网站,可以下载到免费的字体供我们使用。

https://fonts.google.com/

https://www.1001freefonts.com/

字体文件,通常都是设计师提供给我们的,一般都是 .ttf(TrueType) 或者 .otf(OpenType) 这两种格式的,比较常用的是 .ttf 格式的。

通常我们会把字体文件放再 assets 目录下,想要加载字体文件,需要使用到 Typeface 这个类,它其中提供了一些 Api ,用于帮助我们来加载一个我们自定义的字体文件。

例如下面的例子,是一个通用的做法。

而 Typeface 并不只是为了加载一些自定义的字体文件,系统内置的字体,也是通过 Typeface 来管理的,可以说它就是 Android 的字体大管家。

好了,今天就到这里。

下篇预告

Typeface 为我们提供了非常便捷的 Api,下篇会从源码到使用,带你一起分析一下 Typeface 的所有细节。

点赞或者分享吧~

android字体样式相关推荐

  1. Android字体样式修改

    效果图 准备字体 Download Alibaba Sans比如阿里巴巴普惠体,也可以其他网站找一些对应的资源. 字体使用 将字体文件放到res/font文件夹下,如果没有font文件,则新建一个. ...

  2. android 字体样式

    前些天,弄了个小程序.总觉得他Y的手机字体太难看.然后在网上死命的查.原来方法贼简单.差点被忽悠去替换系统文件.废话不说.上程序代码片段. 在贴代码之前,请你注意2点: 1.你的手机最好是1500¥以 ...

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

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

  4. android 字体样式设置为LCB(实现第三方库字体)

    第一种方式:直接在xml文件里面设置 步骤一:在res目录下面建立一个名为font的文件夹,然后把LCB格式的ttf文件放进去. 步骤二:在对应的控件里面添加一句"android:fontF ...

  5. Android中对同一个TextView设置不同字体样式

    这个只是做一个笔记,详情见代码: 代码中的注释也有说明. TextView textView = (TextView) findViewById(R.id.textView1);SpannableSt ...

  6. Android TextView 设置文字背景色或文字颜色,字体阴影,字体样式

          String str="这是设置TextView部分文字背景颜色和前景颜色的demo!";         int bstart=str.indexOf("背 ...

  7. Android TextView字体样式设置

    在Android的开发中,对字体样式的设置是必不可少的,普通的设置主要包括字体的颜色,大小.这些都太小儿科了,略过.但是当一个TextView要显示多种样式的时候就不一样了.如要求其中的某几个文字加上 ...

  8. android开发EditText的Hint字体默认样式和下载字体样式的适配问题。

    紧张了几个月的奋战终于项目到了测试阶段,真是泪奔啊,回想这段时间的地狱生涯 真实汗颜啊~~~~,闲话不多说了,看图说话, 问题,相信这张图片已经展示的很明白了 下来在来看看我的代码 <EditT ...

  9. Android 修改特殊字体样式

    废话不多说,先上图 1.在assets下新建一个fonts文件,把字体样式  .TTF文件 放入 2.代码部分 @BindView(R.id.tv_tv)TextView tvTv;@BindView ...

最新文章

  1. jstl标签的用法 fn标签
  2. rice university phd application result
  3. 【活动回顾】Edge X Kubernetes,探索云原生新边界
  4. Java黑皮书课后题第1章:1.5(计算表达式)编写程序,显示以下式子的结果
  5. golang基础01
  6. vf求计算机系统当前日期的年份数,计算机二级VF常用函数列表
  7. 2020中国数字营销人才发展报告
  8. python具备的功能是_用了Python这么多年,揭秘Python不为人知的7大功能和特点!...
  9. django缓存优化(二)
  10. Spring Boot 定时任务,怎么实现任务动态增删启停?
  11. javascript二叉树基本功能实现
  12. Dell vostro 3667重装系统
  13. 常见信息流广告有哪些展现形式
  14. [WP]第五届XMan选拔赛web
  15. 【数据结构与算法】| Map和Set
  16. 学习大数据可以进入哪些公司?
  17. 简述eureka的自我保护模式? 如何配置其自我保护模式
  18. 蓝桥杯单片机第七届省赛-模拟风扇控制系统
  19. openssl1.0.1 完美 升级到 1.0.1g脚本
  20. AAAI 2020 | 清华大学牛人为BabelNet同义词集预测Sememe建立多语言知识库

热门文章

  1. 集合A(|A|=n)上可以定义多少种不同的等价关系
  2. Hadoop学习之旅三:MapReduce
  3. 一战赚了 1090 亿,“可怕”的张一鸣
  4. LINUX/UBUNTU GCC编译C/C++程序时 自定义库的调用
  5. 漏洞管理_漏洞管理,广阔视野
  6. MSP430单片机各种寄存器总结(7)——USCI_A in UART mode
  7. python通过ip池爬_python 爬虫 代理ip池(适合初学者)
  8. Värde Partners募资逾26亿美元,将寻求市场错置机会
  9. 瑟瑟发抖吧——用了这款软件,我的开发效率提升了50%
  10. 如何实现云上的 RADIUS 认证服务?