Android 字体修改,所有的细节都在这里 | 开篇
版权声明:
本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。
每周会统一更新到这里,如果喜欢,可关注公众号获取最新文章。
未经允许,不得转载。
序
在 Android 下使用自定义字体已经是一个比较常见的需求了,最近也做了个比较深入的研究。
那么按照惯例我又要出个一篇有关 Android 修改字体相关的文章,但是写下来发现内容还挺多的,所以我决定将它们拆分一下,分几篇来详细的讲解(可能是五篇)。主要会是一些常用的替换字体的方案,最后还会介绍一些全局替换的方案,当然也会包含最新的 『Fonts in XML』的方案。
期待你持续关注。
一、开篇
因为 Android 字体相关的内容还比较多的。有时候其实我们只需要调整一下属性就可以满足设计师的需求,或者是一个退后的方案(毕竟有发版的时间卡住了),有一些效果可以大概满足需求。
那么本文就先介绍一下再 Android 下原生内置的一些字体的一些基本概念和使用。
需要注意的是,内置的一些字体只对英文有效。
二、Android 的默认字体
Android 系统默认使用的是一款叫做 Robote 的字体。Robote 本身就是 Google 自己的字体格式,Android 和 Chrome 操作系统上,默认都会使用 Robote 字体,并且也是 Google 视觉语言推荐的字体。
想要了解更多关于 Robote 的内容,可以去 Google 的网站上查看。
正常来说,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 的版本才支持的。
下面直接举几个例子看看效果了:
需要注意的是,如果同时配置了 typeface
和 fontFamily
,将使用 fontFamily
配置的字体。
而除了 typeface
和 fontFamily
会有冲突之外,它们俩都是可以配合 typeStyle
属性一起使用的,也就是说,这里配置的字体,都是可以再加粗或者加斜体。
四、利用主题修改全局字体
如果你能说服你的设计师,接受系统字体的话,你可以在 Theme 中,去配置你需要的默认字体。
在 application 中,通过 android:theme
来配置一个 App 的主题。一般新创建的项目,都是 @style/AppTheme
。在其中追加关于字体的属性 android:fontFamily
,它就可以完成对全局设置一个系统字体。当然你可以对一个单独的 TextView 配置一个特别的字体,都是可以接受的。
五、使用自定义字体
有时候,Android 系统默认的字体已经无法满足我们的需求了,这个时候我们就会需要使用一些定制的特殊字体。
关于字体,这里推荐两个网站,可以下载到免费的字体供我们使用。
字体文件,通常都是设计师提供给我们的,一般都是 .ttf(TrueType)
或者 .otf(OpenType)
这两种格式的,比较常用的是 .ttf
格式的。
通常我们会把字体文件放再 assets 目录下,想要加载字体文件,需要使用到 Typeface 这个类,它其中提供了一些 Api ,用于帮助我们来加载一个我们自定义的字体文件。
例如下面的例子,是一个通用的做法。
而 Typeface 并不只是为了加载一些自定义的字体文件,系统内置的字体,也是通过 Typeface 来管理的,可以说它就是 Android 的字体大管家。
好了,今天就到这里。
下篇预告
Typeface 为我们提供了非常便捷的 Api,下篇会从源码到使用,带你一起分析一下 Typeface 的所有细节。
点赞或者分享吧~
Android 字体修改,所有的细节都在这里 | 开篇的更多相关文章
- Android Studio 修改主题和字体
打开设置 或 修改主题 修改字体 参考资料 Android Studio主题以及字体修改
- 【Android Studio安装部署系列】二十七、Android studio修改项目名称和包名
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 概述 实际项目开发中可能碰到项目名称写错了或者需要修改,而且包名可能也想要修改,那么如何操作呢. 本文是在Android Studio3. ...
- Android Studio 修改 包名 package name
我们的包名中含有Nav,造成声音不能正常出来:需要改包名,但 android studio 改包名原来还是比较麻烦的,不过现在简单多了: 第一步,直接打开 AndroidManifast.xml 文件 ...
- Ubuntu 字体修改以及字体的相关知识 分类: ubuntu 2014-06-19 21:46 81人阅读 评论(0) 收藏
Ubuntu chrome 字体修改 打开任意一张含有输入框的网页,比如Google首页,然后右键点击"搜索框"会拉出一个菜单,我们这样选: 拼音检查选项==>语言设置==& ...
- 2017 Android 面试题 [ 基础与细节 ]
2017 Android 面试题 [ 基础与细节 ] 感谢@chuyao抛出的这些问题,平时业务代码写多了,很多基础的东西变得含糊不清了,这次裸辞出来找工作确实没有之前顺利,顺便求上海Android开 ...
- Android动态修改ToolBar的Menu菜单
Android动态修改ToolBar的Menu菜单 效果图 实现 实现很简单,就是一个具有3个Action的Menu,在我们滑动到不同状态的时候,把对应的Action隐藏了. 开始上货 Menu Me ...
- Android必知必会-Android Studio修改包名
如果移动端访问不佳,请尝试–> Github版 背景 公司做相似产品较多,一般都是以某个产品为基础修改,逐步替换设计图的切图.这个就会导致需要经常为Copy的项目修改包名. 这里是参考一些网上的 ...
- 程序员常用字体(vs2008字体修改方案)
字体不仅是设计师手中重要的武器,对我们开发人员来说,字体的选择也有许多讲究,一个好的.适合展示代码的字体,应该具备以下要素: 等宽的字符 简洁.清晰并且规范的字符形状 支持ASCII码为128以上的扩 ...
- Android Studio 修改包名最便捷做法
Android Studio,咱们开发安卓的利器,自推出就受到移动开发者的追捧,但一路走来,大家谈到他,充满了兴奋之情之余,也略显羞涩.随版本自推出以来,不断完善BUG,但咱们还是深深地踩了进去,说多 ...
随机推荐
- CentOS下安装JDK7
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-se-jdk-7-download-432154.html 1. 安 ...
- 将Windows系统默认的Administrator帐号改名为我们自定义的名称
将Windows系统默认的Administrator帐号改名为我们自定义的名称.. ---------如何将Administrator帐号改名为我们自定义的名称:Win+R--->>输入g ...
- 用notepad如何在每行结尾处添加特殊字符
在处理关键词的时候,有时候需要将每一行的末尾添加某个特殊字符,较常用的一种方法就是用excel拼接起来.今天要分享是一种简单的方法,用notepad就可以很容易实现,主要用到notepad中的扩展匹配 ...
- js获得时间new Date()整理
Date对象取得年份有两种方法:getFullYear()和getYear() 经测试var dt = new Date(); //alert(new Date())弹出:Thu Aug 24 201 ...
- git/github常用指令、入门
git的基本常用指令: 1.cd:切换路径 2.mkdir:进入文件夹目录 3.pwd:显示当前目录的路径 4.git init:把当前的目录变成可以管理的git仓库,生成隐藏.git文件 5.git ...
- 纹理混合遇到的问题 pre-multiplying OpenGL Android iOS
纹理混合遇到的问题 pre-multiplying OpenGL Android iOS Alpha-blending pre-multiplying of texture OpenGL Androi ...
- dede织梦如何防止被黑客入侵渗透?
dede精简设置篇:避免被hack注射挂马 精简设置篇:不需要的功能统统删除.比如不需要会员就将member文件夹删除.删除多余组件是避免被hack注射的最佳办法.将每个目录添加空的index.htm ...
- 使用Coding.net+Hexo+node.js+git来搭建个人博客
使用Coding.net来搭建基于Hexo的博客 一.准备工作 什么是Coding.net Coding可以说,就是国产的Github,但是,有一个功能使它似乎超越了GitHub-那就是 Web ID ...
- python专题-Mysql数据库(python3._+ PyMysql)
之前写过一篇 Python使用MySQL数据库的博客,主要使用的是Python2和MySQLdb驱动. python使用mysql数据库 Python2 ---> Python3 MySQLdb ...
- [WPF]如何调试Data Binding
前言 在WPF开发中,将ViewModel中对象绑定到UI上时,会出现明明已经将数据对象Binding到UI,但是UI上就是不显示等等的问题.这篇博客将介绍WPF Data Binding相关的内容, ...