Android字體修改,所有的細(xì)節(jié)都在這里 | 開篇
序
在 Android 下使用自定義字體已經(jīng)是一個(gè)比較常見的需求了,最近也做了個(gè)比較深入的研究。
那么按照慣例我又要出個(gè)一篇有關(guān) Android 修改字體相關(guān)的文章,但是寫下來發(fā)現(xiàn)內(nèi)容還挺多的,所以我決定將它們拆分一下,分幾篇來詳細(xì)的講解(可能是五篇)。主要會(huì)是一些常用的替換字體的方案,***還會(huì)介紹一些全局替換的方案,當(dāng)然也會(huì)包含***的 『Fonts in XML』的方案。
期待你持續(xù)關(guān)注。
一、開篇
因?yàn)?Android 字體相關(guān)的內(nèi)容還比較多的。有時(shí)候其實(shí)我們只需要調(diào)整一下屬性就可以滿足設(shè)計(jì)師的需求,或者是一個(gè)退后的方案(畢竟有發(fā)版的時(shí)間卡住了),有一些效果可以大概滿足需求。
那么本文就先介紹一下再 Android 下原生內(nèi)置的一些字體的一些基本概念和使用。
需要注意的是,內(nèi)置的一些字體只對英文有效。
二、Android 的默認(rèn)字體
Android 系統(tǒng)默認(rèn)使用的是一款叫做 Robote 的字體。Robote 本身就是 Google 自己的字體格式,Android 和 Chrome 操作系統(tǒng)上,默認(rèn)都會(huì)使用 Robote 字體,并且也是 Google 視覺語言推薦的字體。
想要了解更多關(guān)于 Robote 的內(nèi)容,可以去 Google 的網(wǎng)站上查看。
https://fonts.google.com/specimen/Roboto
正常來說,Robote 就已經(jīng)提供了多種的選擇,例如:粗細(xì)、斜體 等等。但是通常它并不能滿足我們設(shè)計(jì)師的需要。
接下來看看當(dāng)我們想要使用 Android 內(nèi)置的一些字體的時(shí)候,我們需要使用哪些屬性。
三、哪些屬性可以影響字體
Android 本身已經(jīng)提供了一些修改字體樣式的屬性和方法。
當(dāng)你想要修改字體的時(shí)候,你將面對三個(gè)屬性,它們都有對應(yīng)的 Java 方法。
- android:textStyle
- android:typeface
- android:fontFamily
下面來分別詳細(xì)的說明這幾個(gè)屬性。
3.1 android:typeStyle
textStyle 主要用于設(shè)定一些字體的樣式,它是對所有的字體都生效的。也就是說哪怕你替換了字體,依然可以使用 textStyle 來修飾它的樣式。textStyle 本身支持的可選項(xiàng)有 normal|bold|italic,它們也非常的好理解,就是普通|粗體|斜體。
可以看到,字體是不受 textStyle 影響的,這里影響的只有它的樣式。
3.2 android:typeface
typeface 可以用于設(shè)置一些默認(rèn)的字體,它可選的屬性有 normal|sans|serif|monospace 等。normal 和 sans 的字體其實(shí)是一樣的,serif 是一個(gè)帶襯線的字體,而 nonospace 是等寬字體。
光這樣說,其實(shí)也無法理解它們,直接上效果圖比較能說明問題。
可以看到 serif 在默認(rèn)的字體上,增加了襯線。而 nonospace 限制了每個(gè)字符的寬度,讓它們達(dá)到一個(gè)等寬的效果。
等寬其實(shí)很好理解,襯線到底是什么意思?這里引用維基百科的一張圖,就能很直觀的說明問題。
襯線其實(shí)就是字體邊緣的那一點(diǎn)點(diǎn)小啾啾。
3.3 android:fontFamily
fontFamily 看著像是對 typeface 的一次加強(qiáng),從它的可選項(xiàng)就能看出來,它更細(xì)致的區(qū)分了字體的樣式。
fontFamily 的可選項(xiàng)還是很多的,這里就不一一列舉了。不過需要注意,有一些字體的設(shè)置是有版本限制的。
例如:sans-serif-medium 是需要 Android 5.0 的版本才支持的。
下面直接舉幾個(gè)例子看看效果了:
需要注意的是,如果同時(shí)配置了 typeface 和 fontFamily ,將使用 fontFamily 配置的字體。
而除了 typeface 和 fontFamily 會(huì)有沖突之外,它們倆都是可以配合 typeStyle 屬性一起使用的,也就是說,這里配置的字體,都是可以再加粗或者加斜體。
四、利用主題修改全局字體
如果你能說服你的設(shè)計(jì)師,接受系統(tǒng)字體的話,你可以在 Theme 中,去配置你需要的默認(rèn)字體。
在 application 中,通過 android:theme 來配置一個(gè) App 的主題。一般新創(chuàng)建的項(xiàng)目,都是 @style/AppTheme 。在其中追加關(guān)于字體的屬性 android:fontFamily,它就可以完成對全局設(shè)置一個(gè)系統(tǒng)字體。當(dāng)然你可以對一個(gè)單獨(dú)的 TextView 配置一個(gè)特別的字體,都是可以接受的。
五、使用自定義字體
有時(shí)候,Android 系統(tǒng)默認(rèn)的字體已經(jīng)無法滿足我們的需求了,這個(gè)時(shí)候我們就會(huì)需要使用一些定制的特殊字體。
關(guān)于字體,這里推薦兩個(gè)網(wǎng)站,可以下載到免費(fèi)的字體供我們使用。
https://www.1001freefonts.com/
字體文件,通常都是設(shè)計(jì)師提供給我們的,一般都是 .ttf(TrueType) 或者 .otf(OpenType) 這兩種格式的,比較常用的是 .ttf 格式的。
通常我們會(huì)把字體文件放再 assets 目錄下,想要加載字體文件,需要使用到 Typeface 這個(gè)類,它其中提供了一些 Api ,用于幫助我們來加載一個(gè)我們自定義的字體文件。
例如下面的例子,是一個(gè)通用的做法。
而 Typeface 并不只是為了加載一些自定義的字體文件,系統(tǒng)內(nèi)置的字體,也是通過 Typeface 來管理的,可以說它就是 Android 的字體大管家。
好了,今天就到這里。
【本文為51CTO專欄作者“張旸”的原創(chuàng)稿件,轉(zhuǎn)載請通過微信公眾號(hào)聯(lián)系作者獲取授權(quán)】