成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

設計師說,我們要在 App 里用十種字體!!!

移動開發 Android
在 Android 下使用自定義字體已經是一個比較常見的需求了,最近也做了個比較深入的研究。那么按照慣例我又要出個一篇有關 Android 修改字體相關的文章,但是寫下來發現內容還挺多的,所以我決定將它們拆分一下,分幾篇來詳細的講解。

[[206270]]

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

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

期待你持續關注。

本篇是本系列的第六篇,之前已經發布的文章,有興趣可以先看看。

Android 字體修改概述|開篇

修改字體需要了解 Typeface 的所有細節

簡單粗暴的方式,修改字體

利用反射,修改全局字體

利用 AppCompatDelegate ,全局替換全局字體

通過修改 LayoutInflater,全局替換字體!

一、前言

之前寫了很多關于如何在成熟項目中,快速、低入侵的替換全局的字體。但是通常,如果設計師有替換字體的要求,一般不會只使用一個字體,而是會有多個不同的字體文件,根據不同的顯示位置,加載不同的字體文件。

那么本文,就介紹如何通過自定義屬性,來指定需要的字體,從而實現加載多字體文件的需求。

如何使用 LayoutInflater.setFactroy() 動態替換控件,這是本文的基礎,如果不太明白的可以先看看之前的文章《利用 LayoutInflater,優雅的替換全局字體》。

二、自定義屬性

既然,我們已經需要重寫 TextView、Button 這一系列顯示文字的控件,那么如何區分它們加載那個字體文件,我第一個想到的就是使用屬性來完成。

對于自定義屬性,其實用起來非常的簡單,一般通過幾個步驟,就可以簡單使用。

  1. 編寫自定義 View 類。
  2. 編寫 values/attrs.xml,編寫 styleable 或者 attr 標簽。
  3. 在 layout-xml 布局中,使用自定義屬性。(需要注意 namespace)。
  4. 在自定義 View 中,通過 TypedArray 或者 AttributeSet 獲取到我們自定義的屬性。

其實,自定義屬性非常的靈活,定義的時候可以選擇使用 declare-styleable 或者 attr 標簽來定義它,而獲取的時候,也可以選擇使用 TypedArray 或者 AttributeSet 來獲取它。這些都非常的靈活,我們按照自己的需要設定和獲取就好了,沒什么好細說的,有關自定義屬性,可以單獨寫一篇文章了,就不在這里贅述了,有空再單獨總結。

三、使用自定義屬性的 Demo

既然已經明確了方案,會使用 LayoutInflater.setFactory() 來替換 TextView 控件,在 TextView 控件中,通過獲取自定義屬性的值,拿到我們定義的數據,根據自定義數據的值,為 TextView 加載不同的字體文件。

那么接下來就讓我們實際操作一下,看看如何實現吧。

3.1 準備工作

首先我們需要有多個字體文件,這里把它存儲在 assets 目錄下面。

這里使用了 6 個不同的字體文件,它們是 .otf 格式的。

然后就可以編寫我們需要的自定義屬性了。

因為我們本身字體有點多,所以這里使用了一個枚舉類型的 attr 來區分,為每種字體設置一個簡稱,這樣可以簡化我們后續的操作。

接下來就可以開始編寫我們的自定義 FontAppCompatText 了。

在 FontAppCompatText 中,從 AttributeSet 中,獲取到我們通過自定義屬性設定的字體,然后根據屬性設定字體,分別加載不同的字體文件。當然你也可以用 TypedArray ,獲取的方式略有不同。

這里用到了 Typeface,它可以幫我們加載字體文件。如果不了解的,可以先看看之前的文章《想要修改 Android 字體,先了解一下 Typeface 吧》。

然后,我們還需要一個 BaseActivity ,在其中的 onCreate() 方法中,調用替換控件需要的 LayoutInflaterCompat.setFratory() 方法。

到這里,前期的準備工作就已經做好了,我們只需要使用它們就好了。

3.2 使用屬性加載多字體

首先,我們需要有一個 Activity,來繼承 CustomFontActivity 。

在其中加載的 layout-xml 布局中,寫很多個 TextView ,分別使用我們之前自定義屬性 font ,來配置不同的字體。

需要注意的是,因為這里使用了自定義屬性,所以需要在根布局上,添加 xmlns:fonts="http://schemas.android.com/apk/res-auto"" ,一般 IDE 也會有警告,我們忽略它就可以了,使用 tools:ignore="MissingPrefix"設置忽略,當然,這里由引入了 tools 這個命名空間,所以還需要加上 xmlns:tools="http://schemas.android.com/tools"。

到這里就已經完成了我們使用自定義屬性,區分 TextView 加載不同的字體的要求了。

找個設備運行一下,看看效果如何。

我這個字體文件,比較小,只包含了英文和數字,所以對中文無效。

【本文為51CTO專欄作者“張旸”的原創稿件,轉載請通過微信公眾號聯系作者獲取授權】

戳這里,看該作者更多好文

責任編輯:武曉燕 來源: 51CTO專欄
相關推薦

2017-12-11 16:25:25

2023-05-15 20:08:04

Linux字體

2023-05-15 15:29:13

設計模式JavaScript

2024-01-22 08:15:42

API協議設計

2024-09-03 10:40:38

2016-03-18 07:21:56

網站體驗設計錯誤

2024-01-02 11:38:41

體驗交互設計

2025-06-16 08:22:23

2018-01-15 11:41:33

代碼網絡運維研發

2016-08-09 10:10:33

2024-11-13 13:20:44

2010-09-07 13:12:17

2025-02-10 08:30:00

JavaScrip開發設計模式

2010-07-16 16:45:56

職場培訓

2010-08-30 16:18:05

2020-08-13 07:00:00

工具技術管理

2018-09-25 23:21:13

2010-09-13 17:17:04

2024-08-22 08:54:40

2010-07-07 11:30:16

UML十種圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线视频一区 | 在线一区视频 | 91看片免费 | 成人a免费 | 午夜伊人 | 日韩中文字幕免费在线 | 综合二区 | 精品av| 精品成人一区二区 | 伊人狠狠 | 91爱爱·com | 欧美理论片在线观看 | 日韩国产精品一区二区三区 | 中文字幕亚洲欧美日韩在线不卡 | 毛片一区二区三区 | 国产免费观看视频 | 国产精品久久久久久久免费观看 | 国产精品一区一区 | 黄色三级在线播放 | 亚洲综合大片69999 | 亚洲精品一区二区在线观看 | 一区二区三区在线播放 | 日韩欧美一区二区三区四区 | 亚洲精选久久 | 精品福利一区 | 欧美日韩第一页 | 亚洲视频在线一区 | 伊人久久成人 | 91麻豆产精品久久久久久 | 欧美二区在线 | 福利视频网| 免费观看成人性生生活片 | 中文字幕亚洲一区二区三区 | 日本不卡一区二区 | 精品亚洲一区二区三区四区五区 | 亚洲国产aⅴ精品一区二区 免费观看av | 羞羞视频在线观看 | 91综合在线视频 | 在线观看久草 | 成人欧美一区二区三区视频xxx | 国产精品国产精品 |