Android 字型修改,所有的細節都在這裡 | 開篇

承香墨影發表於2017-09-21

版權宣告:

本賬號釋出文章均來自公眾號,承香墨影(cxmyDev),版權歸承香墨影所有。

每週會統一更新到這裡,如果喜歡,可關注公眾號獲取最新文章。

未經允許,不得轉載。

在 Android 下使用自定義字型已經是一個比較常見的需求了,最近也做了個比較深入的研究。

那麼按照慣例我又要出個一篇有關 Android 修改字型相關的文章,但是寫下來發現內容還挺多的,所以我決定將它們拆分一下,分幾篇來詳細的講解(可能是五篇)。主要會是一些常用的替換字型的方案,最後還會介紹一些全域性替換的方案,當然也會包含最新的 『Fonts in XML』的方案。

期待你持續關注。

一、開篇

因為 Android 字型相關的內容還比較多的。有時候其實我們只需要調整一下屬性就可以滿足設計師的需求,或者是一個退後的方案(畢竟有發版的時間卡住了),有一些效果可以大概滿足需求。

那麼本文就先介紹一下再 Android 下原生內建的一些字型的一些基本概念和使用。

需要注意的是,內建的一些字型只對英文有效。

二、Android 的預設字型

Android 系統預設使用的是一款叫做 Robote 的字型。Robote 本身就是 Google 自己的字型格式,Android 和 Chrome 作業系統上,預設都會使用 Robote 字型,並且也是 Google 視覺語言推薦的字型。

想要了解更多關於 Robote 的內容,可以去 Google 的網站上檢視。

fonts.google.com/specimen/Ro…

正常來說,Robote 就已經提供了多種的選擇,例如:粗細、斜體 等等。但是通常它並不能滿足我們設計師的需要。

接下來看看當我們想要使用 Android 內建的一些字型的時候,我們需要使用哪些屬性。

三、哪些屬性可以影響字型

Android 本身已經提供了一些修改字型樣式的屬性和方法。

當你想要修改字型的時候,你將面對三個屬性,它們都有對應的 Java 方法。

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

下面來分別詳細的說明這幾個屬性。

3.1 android:textStyle

textStyle 主要用於設定一些字型的樣式,它是對所有的字型都生效的。也就是說哪怕你替換了字型,依然可以使用 textStyle 來修飾它的樣式。textStyle 本身支援的可選項有 normal|bold|italic,它們也非常的好理解,就是普通|粗體|斜體

/f-textStyle.png
/f-textStyle.png

可以看到,字型是不受 textStyle 影響的,這裡影響的只有它的樣式。

3.2 android:typeface

typeface 可以用於設定一些預設的字型,它可選的屬性有 normal|sans|serif|monospace 等。normal 和 sans 的字型其實是一樣的,serif 是一個帶襯線的字型,而 nonospace 是等寬字型。

光這樣說,其實也無法理解它們,直接上效果圖比較能說明問題。

/f-typeface.png
/f-typeface.png

可以看到 serif 在預設的字型上,增加了襯線。而 nonospace 限制了每個字元的寬度,讓它們達到一個等寬的效果。

等寬其實很好理解,襯線到底是什麼意思?這裡引用維基百科的一張圖,就能很直觀的說明問題。

/f-textserif.png
/f-textserif.png

襯線其實就是字型邊緣的那一點點小啾啾。

3.3 android:fontFamily

fontFamily 看著像是對 typeface 的一次加強,從它的可選項就能看出來,它更細緻的區分了字型的樣式。

fontFamily 的可選項還是很多的,這裡就不一一列舉了。不過需要注意,有一些字型的設定是有版本限制的。

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

下面直接舉幾個例子看看效果了:

/f-fontfamily.png
/f-fontfamily.png

需要注意的是,如果同時配置了 typefacefontFamily ,將使用 fontFamily 配置的字型。

而除了 typefacefontFamily 會有衝突之外,它們倆都是可以配合 typeStyle 屬性一起使用的,也就是說,這裡配置的字型,都是可以再加粗或者加斜體。

四、利用主題修改全域性字型

如果你能說服你的設計師,接受系統字型的話,你可以在 Theme 中,去配置你需要的預設字型。

在 application 中,通過 android:theme 來配置一個 App 的主題。一般新建立的專案,都是 @style/AppTheme 。在其中追加關於字型的屬性 android:fontFamily,它就可以完成對全域性設定一個系統字型。當然你可以對一個單獨的 TextView 配置一個特別的字型,都是可以接受的。

/f-basetheme.png
/f-basetheme.png

五、使用自定義字型

有時候,Android 系統預設的字型已經無法滿足我們的需求了,這個時候我們就會需要使用一些定製的特殊字型。

關於字型,這裡推薦兩個網站,可以下載到免費的字型供我們使用。

fonts.google.com/

www.1001freefonts.com/

字型檔案,通常都是設計師提供給我們的,一般都是 .ttf(TrueType) 或者 .otf(OpenType) 這兩種格式的,比較常用的是 .ttf 格式的。

通常我們會把字型檔案放再 assets 目錄下,想要載入字型檔案,需要使用到 Typeface 這個類,它其中提供了一些 Api ,用於幫助我們來載入一個我們自定義的字型檔案。

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

/f-createfont.png
/f-createfont.png

而 Typeface 並不只是為了載入一些自定義的字型檔案,系統內建的字型,也是通過 Typeface 來管理的,可以說它就是 Android 的字型大管家。

好了,今天就到這裡。

下篇預告

Typeface 為我們提供了非常便捷的 Api,下篇會從原始碼到使用,帶你一起分析一下 Typeface 的所有細節。

公眾號二維碼.jpg
公眾號二維碼.jpg

點贊或者分享吧~

相關文章