版权声明:

本账号发布文章均来自公众号,承香墨影(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 Studio 修改主题和字体

    打开设置 或   修改主题 修改字体 参考资料 Android Studio主题以及字体修改

  2. 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 实际项目开发中可能碰到项目名称写错了或者需要修改,而且包名可能也想要修改,那么如何操作呢. 本文是在Android Studio3. ...

  3. Android Studio 修改 包名 package name

    我们的包名中含有Nav,造成声音不能正常出来:需要改包名,但 android studio 改包名原来还是比较麻烦的,不过现在简单多了: 第一步,直接打开 AndroidManifast.xml 文件 ...

  4. Ubuntu 字体修改以及字体的相关知识 分类: ubuntu 2014-06-19 21:46 81人阅读 评论(0) 收藏

    Ubuntu chrome 字体修改 打开任意一张含有输入框的网页,比如Google首页,然后右键点击"搜索框"会拉出一个菜单,我们这样选: 拼音检查选项==>语言设置==& ...

  5. 2017 Android 面试题 [ 基础与细节 ]

    2017 Android 面试题 [ 基础与细节 ] 感谢@chuyao抛出的这些问题,平时业务代码写多了,很多基础的东西变得含糊不清了,这次裸辞出来找工作确实没有之前顺利,顺便求上海Android开 ...

  6. Android动态修改ToolBar的Menu菜单

    Android动态修改ToolBar的Menu菜单 效果图 实现 实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,把对应的Action隐藏了. 开始上货 Menu Me ...

  7. Android必知必会-Android Studio修改包名

    如果移动端访问不佳,请尝试–> Github版 背景 公司做相似产品较多,一般都是以某个产品为基础修改,逐步替换设计图的切图.这个就会导致需要经常为Copy的项目修改包名. 这里是参考一些网上的 ...

  8. 程序员常用字体(vs2008字体修改方案)

    字体不仅是设计师手中重要的武器,对我们开发人员来说,字体的选择也有许多讲究,一个好的.适合展示代码的字体,应该具备以下要素: 等宽的字符 简洁.清晰并且规范的字符形状 支持ASCII码为128以上的扩 ...

  9. Android Studio 修改包名最便捷做法

    Android Studio,咱们开发安卓的利器,自推出就受到移动开发者的追捧,但一路走来,大家谈到他,充满了兴奋之情之余,也略显羞涩.随版本自推出以来,不断完善BUG,但咱们还是深深地踩了进去,说多 ...

随机推荐

  1. 常用的Linux发行版

    Linux发行版百花齐放 [内容摘要] 如今,众多的Linux发行版百花齐放,linux的阵营日益壮大,每一款发行版都拥有一大批用户,开发者自愿为相关项目投入精力.Linux发行版可谓是形形色色,它们 ...

  2. .NET跨平台实践:Linux .Net Core自宿主应用程序瘦身记

    一,.NET Core 自宿主应用程序个头很大 发布.NET Core应用程序有两个方式,一种是“便携式”,一种是“自宿主式”.便携式发布时,目标程序不带.net core运行环境,所以“个头”很小, ...

  3. tomcat运行时JVM参数调整

    进入tomcat/bin目录 catalina.bat 中加入set JAVA_OPTS=-Xms210m -Xmx256m -Xmn70m -XX:PermSize=150m -XX:MaxPerm ...

  4. Hibernate级联操作解密(inverse和cascade)

    总结: Cascade:对级联操作进行限制,有如下几个参数: all : 所有情况下均进行关联操作.  none:所有情况下均不进行关联操作.这是默认值.  save-update:在执行save/u ...

  5. vue-cli脚手架npm相关文件解读(5)vue-loader.conf.js

    系列文章传送门: 1.build/webpack.base.conf.js 2.build/webpack.prod.conf.js 3.build/webpack.dev.conf.js 4.bui ...

  6. Thinkphp报错 -- “_STORAGE_WRITE_ERROR_”

    磁盘满了 没有写入权限 解决方法:   chmod -R 777 Runtime目录路径

  7. React编写input组件传参共用onChange

    之前写页面上的input比较少,所以没有单提出来一个组件,今天研究了下input组件,但共用一个onChange的问题卡了一会儿,查了下发现几个比较好的方法,分享下: 方法一 Input组件 let ...

  8. jQuery事件对象

    1.event.currentTarget 事件的监听者2.event.target 事件的目标3.event.delegateTarget 绑定了当前正在调用jQuery事件处理器的(当前事件的委托 ...

  9. React渲染问题研究以及Immutable的应用

    写在前面 这里主要介绍自己在React开发中的一些总结,关于react的渲染问题的一点研究. 另外本人一直希望在React项目中尝试使用,因此在之前已经介绍过immutable的API,可以参看这里I ...

  10. Java 的概述

    Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是有SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台(即JavaSE,JavaEE,JavaME ...