文章目录

  • 1、TextView
    • 1.1 Font Family
    • 1.2 Text Style
    • 1.3 Typeface
    • 1.4 属性解析过程
    • 1.5 Typeface
    • 1.6 Font Matrix
    • 1.7 style&theme
  • 2、Font配置
  • 3、Font加载

1、TextView

在介绍Android Font之前,首先需要了解一下与Font相关的TextView的知识。TextView有许多属性,下面着重介绍几个。

1.1 Font Family

android:fontFamily:设置Font Family,可以是Android支持的Font Family,也可以是自定义的Font Family。既然称为Family,就会包含一组Font成员,每个Font成员的属性不同,使用不同的ttf文件。

Android支持的Font Family可参照frameworks/base/data/fonts/fonts.xml,代码如下。

<?xml version="1.0" encoding="utf-8"?>
<!--WARNING: Parsing of this file by third-party apps is not supported. Thefile, and the font files it refers to, will be renamed and/or moved outfrom their respective location in the next Android release, and/or theformat or syntax of the file may change significantly. If you parse thisfile for information about system fonts, do it at your own risk. Yourapplication will almost certainly break with the next major Androidrelease.In this file, all fonts without names are added to the default list.Fonts are chosen based on a match: full BCP-47 language tag includingscript, then just language, and finally order (the first font containingthe glyph).Order of appearance is also the tiebreaker for weight matching. This isthe reason why the 900 weights of Roboto precede the 700 weights - weprefer the former when an 800 weight is requested. Since bold spanseffectively add 300 to the weight, this ensures that 900 is the boldpaired with the 500 weight, ensuring adequate contrast.
-->
<familyset version="22"><!-- first font is default --><family name="sans-serif"><font weight="100" style="normal">Roboto-Thin.ttf</font><font weight="100" style="italic">Roboto-ThinItalic.ttf</font><font weight="300" style="normal">Roboto-Light.ttf</font><font weight="300" style="italic">Roboto-LightItalic.ttf</font><font weight="400" style="normal">Roboto-Regular.ttf</font><font weight="400" style="italic">Roboto-Italic.ttf</font><font weight="500" style="normal">Roboto-Medium.ttf</font><font weight="500" style="italic">Roboto-MediumItalic.ttf</font><font weight="900" style="normal">Roboto-Black.ttf</font><font weight="900" style="italic">Roboto-BlackItalic.ttf</font><font weight="700" style="normal">Roboto-Bold.ttf</font><font weight="700" style="italic">Roboto-BoldItalic.ttf</font></family><!-- Note that aliases must come after the fonts they reference. --><alias name="sans-serif-thin" to="sans-serif" weight="100" /><alias name="sans-serif-light" to="sans-serif" weight="300" /><alias name="sans-serif-medium" to="sans-serif" weight="500" /><alias name="sans-serif-black" to="sans-serif" weight="900" /><alias name="arial" to="sans-serif" /><alias name="helvetica" to="sans-serif" /><alias name="tahoma" to="sans-serif" /><alias name="verdana" to="sans-serif" /><family name="sans-serif-condensed"><font weight="300" style="normal">RobotoCondensed-Light.ttf</font><font weight="300" style="italic">RobotoCondensed-LightItalic.ttf</font><font weight="400" style="normal">RobotoCondensed-Regular.ttf</font><font weight="400" style="italic">RobotoCondensed-Italic.ttf</font><font weight="500" style="normal">RobotoCondensed-Medium.ttf</font><font weight="500" style="italic">RobotoCondensed-MediumItalic.ttf</font><font weight="700" style="normal">RobotoCondensed-Bold.ttf</font><font weight="700" style="italic">RobotoCondensed-BoldItalic.ttf</font></family><alias name="sans-serif-condensed-light" to="sans-serif-condensed" weight="300" /><alias name="sans-serif-condensed-medium" to="sans-serif-condensed" weight="500" /><family name="serif"><font weight="400" style="normal">NotoSerif-Regular.ttf</font><font weight="700" style="normal">NotoSerif-Bold.ttf</font><font weight="400" style="italic">NotoSerif-Italic.ttf</font><font weight="700" style="italic">NotoSerif-BoldItalic.ttf</font></family><alias name="times" to="serif" /><alias name="times new roman" to="serif" /><alias name="palatino" to="serif" /><alias name="georgia" to="serif" /><alias name="baskerville" to="serif" /><alias name="goudy" to="serif" /><alias name="fantasy" to="serif" /><alias name="ITC Stone Serif" to="serif" /><family name="monospace"><font weight="400" style="normal">DroidSansMono.ttf</font></family><alias name="sans-serif-monospace" to="monospace" /><alias name="monaco" to="monospace" /><family name="serif-monospace"><font weight="400" style="normal">CutiveMono.ttf</font></family><alias name="courier" to="serif-monospace" /><alias name="courier new" to="serif-monospace" /><family name="casual"><font weight="400" style="normal">ComingSoon.ttf</font></family><family name="cursive"><font weight="400" style="normal">DancingScript-Regular.ttf</font><font weight="700" style="normal">DancingScript-Bold.ttf</font></family><family name="sans-serif-smallcaps"><font weight="400" style="normal">CarroisGothicSC-Regular.ttf</font></family><!-- fallback fonts --><family lang="und-Arab" variant="elegant"><font weight="400" style="normal">NotoNaskhArabic-Regular.ttf</font><font weight="700" style="normal">NotoNaskhArabic-Bold.ttf</font></family><family lang="und-Arab" variant="compact"><font weight="400" style="normal">NotoNaskhArabicUI-Regular.ttf</font><font weight="700" style="normal">NotoNaskhArabicUI-Bold.ttf</font></family><family lang="und-Ethi"><font weight="400" style="normal">NotoSansEthiopic-Regular.ttf</font><font weight="700" style="normal">NotoSansEthiopic-Bold.ttf</font></family><family lang="und-Hebr"><font weight="400" style="normal">NotoSansHebrew-Regular.ttf</font><font weight="700" style="normal">NotoSansHebrew-Bold.ttf</font></family><family lang="und-Thai" variant="elegant"><font weight="400" style="normal">NotoSansThai-Regular.ttf</font><font weight="700" style="normal">NotoSansThai-Bold.ttf</font></family><family lang="und-Thai" variant="compact"><font weight="400" style="normal">NotoSansThaiUI-Regular.ttf</font><font weight="700" style="normal">NotoSansThaiUI-Bold.ttf</font></family><family lang="und-Armn"><font weight="400" style="normal">NotoSansArmenian-Regular.ttf</font><font weight="700" style="normal">NotoSansArmenian-Bold.ttf</font></family><!-- TODO: add Geok --><family lang="und-Geor"><font weight="400" style="normal">NotoSansGeorgian-Regular.ttf</font><font weight="700" style="normal">NotoSansGeorgian-Bold.ttf</font></family><family lang="und-Deva" variant="elegant"><font weight="400" style="normal">NotoSansDevanagari-Regular.ttf</font><font weight="700" style="normal">NotoSansDevanagari-Bold.ttf</font></family><family lang="und-Deva" variant="compact"><font weight="400" style="normal">NotoSansDevanagariUI-Regular.ttf</font><font weight="700" style="normal">NotoSansDevanagariUI-Bold.ttf</font></family><!-- All scripts of India should come after Devanagari, due to shareddanda characters.--><family lang="und-Gujr" variant="elegant"><font weight="400" style="normal">NotoSansGujarati-Regular.ttf</font><font weight="700" style="normal">NotoSansGujarati-Bold.ttf</font></family><family lang="und-Gujr" variant="compact"><font weight="400" style="normal">NotoSansGujaratiUI-Regular.ttf</font><font weight="700" style="normal">NotoSansGujaratiUI-Bold.ttf</font></family><family lang="und-Guru" variant="elegant"><font weight="400" style="normal">NotoSansGurmukhi-Regular.ttf</font><font weight="700" style="normal">NotoSansGurmukhi-Bold.ttf</font></family><family lang="und-Guru" variant="compact"><font weight="400" style="normal">NotoSansGurmukhiUI-Regular.ttf</font><font weight="700" style="normal">NotoSansGurmukhiUI-Bold.ttf</font></family><family lang="und-Taml" variant="elegant"><font weight="400" style="normal">NotoSansTamil-Regular.ttf</font><font weight="700" style="normal">NotoSansTamil-Bold.ttf</font></family><family lang="und-Taml" variant="compact"><font weight="400" style="normal">NotoSansTamilUI-Regular.ttf</font><font weight="700" style="normal">NotoSansTamilUI-Bold.ttf</font></family><family lang="und-Mlym" variant="elegant"><font weight="400" style="normal">NotoSansMalayalam-Regular.ttf</font><font weight="700" style="normal">NotoSansMalayalam-Bold.ttf</font></family><family lang="und-Mlym" variant="compact"><font weight="400" style="normal">NotoSansMalayalamUI-Regular.ttf</font><font weight="700" style="normal">NotoSansMalayalamUI-Bold.ttf</font></family><family lang="und-Beng" variant="elegant"><font weight="400" style="normal">NotoSansBengali-Regular.ttf</font><font weight="700" style="normal">NotoSansBengali-Bold.ttf</font></family><family lang="und-Beng" variant="compact"><font weight="400" style="normal">NotoSansBengaliUI-Regular.ttf</font><font weight="700" style="normal">NotoSansBengaliUI-Bold.ttf</font></family><family lang="und-Telu" variant="elegant"><font weight="400" style="normal">NotoSansTelugu-Regular.ttf</font><font weight="700" style="normal">NotoSansTelugu-Bold.ttf</font></family><family lang="und-Telu" variant="compact"><font weight="400" style="normal">NotoSansTeluguUI-Regular.ttf</font><font weight="700" style="normal">NotoSansTeluguUI-Bold.ttf</font></family><family lang="und-Knda" variant="elegant"><font weight="400" style="normal">NotoSansKannada-Regular.ttf</font><font weight="700" style="normal">NotoSansKannada-Bold.ttf</font></family><family lang="und-Knda" variant="compact"><font weight="400" style="normal">NotoSansKannadaUI-Regular.ttf</font><font weight="700" style="normal">NotoSansKannadaUI-Bold.ttf</font></family><family lang="und-Orya" variant="elegant"><font weight="400" style="normal">NotoSansOriya-Regular.ttf</font><font weight="700" style="normal">NotoSansOriya-Bold.ttf</font></family><family lang="und-Orya" variant="compact"><font weight="400" style="normal">NotoSansOriyaUI-Regular.ttf</font><font weight="700" style="normal">NotoSansOriyaUI-Bold.ttf</font></family><family lang="und-Sinh"><font weight="400" style="normal">NotoSansSinhala-Regular.ttf</font><font weight="700" style="normal">NotoSansSinhala-Bold.ttf</font></family><family lang="und-Khmr" variant="elegant"><font weight="100" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="26.0" /></font><font weight="200" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="39.0" /></font><font weight="300" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="58.0" /></font><font weight="400" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="90.0" /></font><font weight="500" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="108.0" /></font><font weight="600" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="128.0" /></font><font weight="700" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="151.0" /></font><font weight="800" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="169.0" /></font><font weight="900" style="normal">NotoSansKhmer-VF.ttf<axis tag="wdth" stylevalue="100.0" /><axis tag="wght" stylevalue="190.0" /></font></family><family lang="und-Khmr" variant="compact"><font weight="400" style="normal">NotoSansKhmerUI-Regular.ttf</font><font weight="700" style="normal">NotoSansKhmerUI-Bold.ttf</font></family><family lang="und-Laoo" variant="elegant"><font weight="400" style="normal">NotoSansLao-Regular.ttf</font><font weight="700" style="normal">NotoSansLao-Bold.ttf</font></family><family lang="und-Laoo" variant="compact"><font weight="400" style="normal">NotoSansLaoUI-Regular.ttf</font><font weight="700" style="normal">NotoSansLaoUI-Bold.ttf</font></family><family lang="und-Mymr" variant="elegant"><font weight="400" style="normal">NotoSansMyanmar-Regular.ttf</font><font weight="700" style="normal">NotoSansMyanmar-Bold.ttf</font></family><family lang="und-Mymr" variant="compact"><font weight="400" style="normal">NotoSansMyanmarUI-Regular.ttf</font><font weight="700" style="normal">NotoSansMyanmarUI-Bold.ttf</font></family><family lang="und-Thaa"><font weight="400" style="normal">NotoSansThaana-Regular.ttf</font><font weight="700" style="normal">NotoSansThaana-Bold.ttf</font></family><family lang="und-Cham"><font weight="400" style="normal">NotoSansCham-Regular.ttf</font><font weight="700" style="normal">NotoSansCham-Bold.ttf</font></family><family lang="und-Adlm"><font weight="400" style="normal">NotoSansAdlam-Regular.ttf</font></family><family lang="und-Avst"><font weight="400" style="normal">NotoSansAvestan-Regular.ttf</font></family><family lang="und-Bali"><font weight="400" style="normal">NotoSansBalinese-Regular.ttf</font></family><family lang="und-Bamu"><font weight="400" style="normal">NotoSansBamum-Regular.ttf</font></family><family lang="und-Batk"><font weight="400" style="normal">NotoSansBatak-Regular.ttf</font></family><family lang="und-Brah"><font weight="400" style="normal">NotoSansBrahmi-Regular.ttf</font></family><family lang="und-Bugi"><font weight="400" style="normal">NotoSansBuginese-Regular.ttf</font></family><family lang="und-Buhd"><font weight="400" style="normal">NotoSansBuhid-Regular.ttf</font></family><family lang="und-Cans"><font weight="400" style="normal">NotoSansCanadianAboriginal-Regular.ttf</font></family><family lang="und-Cari"><font weight="400" style="normal">NotoSansCarian-Regular.ttf</font></family><family lang="und-Cher"><font weight="400" style="normal">NotoSansCherokee-Regular.ttf</font></family><family lang="und-Copt"><font weight="400" style="normal">NotoSansCoptic-Regular.ttf</font></family><family lang="und-Xsux"><font weight="400" style="normal">NotoSansCuneiform-Regular.ttf</font></family><family lang="und-Cprt"><font weight="400" style="normal">NotoSansCypriot-Regular.ttf</font></family><family lang="und-Dsrt"><font weight="400" style="normal">NotoSansDeseret-Regular.ttf</font></family><family lang="und-Egyp"><font weight="400" style="normal">NotoSansEgyptianHieroglyphs-Regular.ttf</font></family><family lang="und-Glag"><font weight="400" style="normal">NotoSansGlagolitic-Regular.ttf</font></family><family lang="und-Goth"><font weight="400" style="normal">NotoSansGothic-Regular.ttf</font></family><family lang="und-Hano"><font weight="400" style="normal">NotoSansHanunoo-Regular.ttf</font></family><family lang="und-Armi"><font weight="400" style="normal">NotoSansImperialAramaic-Regular.ttf</font></family><family lang="und-Phli"><font weight="400" style="normal">NotoSansInscriptionalPahlavi-Regular.ttf</font></family><family lang="und-Prti"><font weight="400" style="normal">NotoSansInscriptionalParthian-Regular.ttf</font></family><family lang="und-Java"><font weight="400" style="normal">NotoSansJavanese-Regular.ttf</font></family><family lang="und-Kthi"><font weight="400" style="normal">NotoSansKaithi-Regular.ttf</font></family><family lang="und-Kali"><font weight="400" style="normal">NotoSansKayahLi-Regular.ttf</font></family><family lang="und-Khar"><font weight="400" style="normal">NotoSansKharoshthi-Regular.ttf</font></family><family lang="und-Lepc"><font weight="400" style="normal">NotoSansLepcha-Regular.ttf</font></family><family lang="und-Limb"><font weight="400" style="normal">NotoSansLimbu-Regular.ttf</font></family><family lang="und-Linb"><font weight="400" style="normal">NotoSansLinearB-Regular.ttf</font></family><family lang="und-Lisu"><font weight="400" style="normal">NotoSansLisu-Regular.ttf</font></family><family lang="und-Lyci"><font weight="400" style="normal">NotoSansLycian-Regular.ttf</font></family><family lang="und-Lydi"><font weight="400" style="normal">NotoSansLydian-Regular.ttf</font></family><family lang="und-Mand"><font weight="400" style="normal">NotoSansMandaic-Regular.ttf</font></family><family lang="und-Mtei"><font weight="400" style="normal">NotoSansMeeteiMayek-Regular.ttf</font></family><family lang="und-Talu"><font weight="400" style="normal">NotoSansNewTaiLue-Regular.ttf</font></family><family lang="und-Nkoo"><font weight="400" style="normal">NotoSansNKo-Regular.ttf</font></family><family lang="und-Ogam"><font weight="400" style="normal">NotoSansOgham-Regular.ttf</font></family><family lang="und-Olck"><font weight="400" style="normal">NotoSansOlChiki-Regular.ttf</font></family><family lang="und-Ital"><font weight="400" style="normal">NotoSansOldItalic-Regular.ttf</font></family><family lang="und-Xpeo"><font weight="400" style="normal">NotoSansOldPersian-Regular.ttf</font></family><family lang="und-Sarb"><font weight="400" style="normal">NotoSansOldSouthArabian-Regular.ttf</font></family><family lang="und-Orkh"><font weight="400" style="normal">NotoSansOldTurkic-Regular.ttf</font></family><family lang="und-Osma"><font weight="400" style="normal">NotoSansOsmanya-Regular.ttf</font></family><family lang="und-Phnx"><font weight="400" style="normal">NotoSansPhoenician-Regular.ttf</font></family><family lang="und-Rjng"><font weight="400" style="normal">NotoSansRejang-Regular.ttf</font></family><family lang="und-Runr"><font weight="400" style="normal">NotoSansRunic-Regular.ttf</font></family><family lang="und-Samr"><font weight="400" style="normal">NotoSansSamaritan-Regular.ttf</font></family><family lang="und-Saur"><font weight="400" style="normal">NotoSansSaurashtra-Regular.ttf</font></family><family lang="und-Shaw"><font weight="400" style="normal">NotoSansShavian-Regular.ttf</font></family><family lang="und-Sund"><font weight="400" style="normal">NotoSansSundanese-Regular.ttf</font></family><family lang="und-Sylo"><font weight="400" style="normal">NotoSansSylotiNagri-Regular.ttf</font></family><!-- Esrangela should precede Eastern and Western Syriac, since it's our default form. --><family lang="und-Syre"><font weight="400" style="normal">NotoSansSyriacEstrangela-Regular.ttf</font></family><family lang="und-Syrn"><font weight="400" style="normal">NotoSansSyriacEastern-Regular.ttf</font></family><family lang="und-Syrj"><font weight="400" style="normal">NotoSansSyriacWestern-Regular.ttf</font></family><family lang="und-Tglg"><font weight="400" style="normal">NotoSansTagalog-Regular.ttf</font></family><family lang="und-Tagb"><font weight="400" style="normal">NotoSansTagbanwa-Regular.ttf</font></family><family lang="und-Lana"><font weight="400" style="normal">NotoSansTaiTham-Regular.ttf</font></family><family lang="und-Tavt"><font weight="400" style="normal">NotoSansTaiViet-Regular.ttf</font></family><family lang="und-Tibt"><font weight="400" style="normal">NotoSansTibetan-Regular.ttf</font><font weight="700" style="normal">NotoSansTibetan-Bold.ttf</font></family><family lang="und-Tfng"><font weight="400" style="normal">NotoSansTifinagh-Regular.ttf</font></family><family lang="und-Ugar"><font weight="400" style="normal">NotoSansUgaritic-Regular.ttf</font></family><family lang="und-Vaii"><font weight="400" style="normal">NotoSansVai-Regular.ttf</font></family><family><font weight="400" style="normal">NotoSansSymbols-Regular-Subsetted.ttf</font></family><family lang="zh-Hans"><font weight="400" style="normal" index="2">NotoSansCJK-Regular.ttc</font></family><!-- TODO: Add Bopo --><family lang="zh-Hant"><font weight="400" style="normal" index="3">NotoSansCJK-Regular.ttc</font></family><family lang="ja"><font weight="400" style="normal" index="0">NotoSansCJK-Regular.ttc</font></family><family lang="ko"><font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font></family><family lang="und-Zsye"><font weight="400" style="normal">NotoColorEmoji.ttf</font></family><family lang="und-Zsym"><font weight="400" style="normal">NotoSansSymbols-Regular-Subsetted2.ttf</font></family><!--Tai Le, Yi, Mongolian, and Phags-pa are intentionally kept last, to make sure they don'toverride the East Asian punctuation for Chinese.--><family lang="und-Tale"><font weight="400" style="normal">NotoSansTaiLe-Regular.ttf</font></family><family lang="und-Yiii"><font weight="400" style="normal">NotoSansYi-Regular.ttf</font></family><family lang="und-Mong"><font weight="400" style="normal">NotoSansMongolian-Regular.ttf</font></family><family lang="und-Phag"><font weight="400" style="normal">NotoSansPhagsPa-Regular.ttf</font></family>
</familyset>

自定义的Font Family,可以在App的res目录下定义,也可以从远程下载,详细用法可参考:https://developer.android.com/guide/topics/resources/font-resource.html。

1.2 Text Style

android:textStyle:设置Text Style,包括粗体和斜体,属性值可以是normal、bold、italic和bold|italic。

1.3 Typeface

android:typeface:设置Typeface,包括衬线字体、非衬线字体和等宽字体,属性值可以是normal、sans、serif、monospace。

1.4 属性解析过程

下图是TextView解析上面提到的三个属性的过程,最重要的一个类便是Typeface。

1.5 Typeface

Typeface在初始化时会默认创建几种Typeface,代码如下。

public class Typeface {public static final Typeface DEFAULT;public static final Typeface DEFAULT_BOLD;public static final Typeface SANS_SERIF;public static final Typeface SERIF;public static final Typeface MONOSPACE;static Typeface[] sDefaults;static {init();DEFAULT         = create((String) null, 0);DEFAULT_BOLD    = create((String) null, Typeface.BOLD);SANS_SERIF      = create("sans-serif", 0);SERIF           = create("serif", 0);MONOSPACE       = create("monospace", 0);sDefaults = new Typeface[] {DEFAULT,DEFAULT_BOLD,create((String) null, Typeface.ITALIC),create((String) null, Typeface.BOLD_ITALIC),};}
}

1.6 Font Matrix

Font涉及几条很重要的线,在FontMetrics中定义,代码如下。

    /*** Class that describes the various metrics for a font at a given text size.* Remember, Y values increase going down, so those values will be positive,* and values that measure distances going up will be negative. This class* is returned by getFontMetrics().*/public static class FontMetrics {/*** The maximum distance above the baseline for the tallest glyph in* the font at a given text size.*/public float   top;/*** The recommended distance above the baseline for singled spaced text.*/public float   ascent;/*** The recommended distance below the baseline for singled spaced text.*/public float   descent;/*** The maximum distance below the baseline for the lowest glyph in* the font at a given text size.*/public float   bottom;/*** The recommended additional space to add between lines of text.*/public float   leading;}

此外,还包括baseline、mean line和capital line,如下图。

1.7 style&theme

style和theme是一个相对高级的话题,不用对每个TextView的各个属性逐个进行设置,而是将相关属性通过style或theme指定,详细用法可参考https://developer.android.com/guide/topics/ui/themes.html。

2、Font配置

在Android源码中,主要有两个地方可以配置Font。一个是frameworks/base/data/fonts目录,另一个是externals目录下面的roboto-fonts、google-fonts和noto-fonts。

以frameworks/base/data/fonts目录为例,目录结构如下。

frameworks/base/data/fonts/
├── AndroidClock.ttf
├── Android.mk
├── DroidSansFallbackFull.ttf
├── DroidSansFallback.ttf
├── DroidSansMono.ttf
├── fonts.mk
├── fonts.xml
├── MODULE_LICENSE_APACHE2
├── NOTICE
└── README.txt

Font的打包规则可参考相应的mk文件。

3、Font加载

Zygote在初始化时会preload一些东西,其中preloadClasses中就包括Typeface,哪些Class需要preload,可在/system/etc/preloaded-classes中找到,真正的配置可在frameworks/base/config目录找到。上面提到了,Font在Typeface中加载,整个流程如下图。

Typeface提供了一组接口用于加载Font,如下。

public static Typeface create(String familyName, int style)
public static Typeface create(Typeface family, int style)
public static Typeface defaultFromStyle(int style)
public static Typeface createFromAsset(AssetManager mgr, String path)
public static Typeface createFromFile(@Nullable File path)
public static Typeface createFromFile(@Nullable String path)

Typeface在Native层通过hwui模块管理。

【Android】图文解密Android Font相关推荐

  1. android base64解密,android Base64 AES加密解密

    Android Base64代码如下: // 加密传入的数据是byte类型的,并非使用decode方法将原始数据转二进制,String类型的数据 使用 str.getBytes()即可 String ...

  2. android groovy方法,Android Gradle从入门到精通(三)Groovy快速入门指南

    前言 在前面我们学习了为什么现在要用Gradle?和Gradle入门前奏两篇文章,对Gradle也有了大概的了解,这篇文章我们接着来学习Groovy的基础,要想学好Gradle,Groovy是必须要掌 ...

  3. android scrollview 布局,Android scrollview实现底部继续拖动查看图文详情

    本文实例为大家分享了Android实现底部拖动查看图文详情的具体代码,供大家参考,具体内容如下 一.效果图 二.实现步骤 1.xml布局的实现/p> android:id="@+id/ ...

  4. 使用Android Studio搭建Android集成开发环境(图文教程)

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  5. android studio获取数字签名,Android应用开发Android Studio数字签名打包apk图文步骤教程...

    本文将带你了解Android应用开发Android Studio数字签名打包apk图文步骤教程,希望本文对大家学Android有所帮助. Android Studio数字签名打包release版apk ...

  6. android 图文弹幕重叠,Android双重SurfaceView实现弹幕效果

    本文实例为大家分享了Android双重SurfaceView实现弹幕效果的具体代码,供大家参考,具体内容如下 页面布局 首先是XML的layout布局,这里的总的父布局是一个FrameLayout用于 ...

  7. android视频流加密,android 视频 加密/解密(使用AES)

    java语言进行加密解密速度挺慢的..一个6MB左右的文件需要10多秒...等有空了瞅瞅ffmpeg去.. MainActivity.java /** * 视频加密/解密 * * @author ol ...

  8. android滴滴技术架构,滴滴乘客端Android架构解密_何斌斌.pdf

    滴滴出行乘客端Android架构解密 何斌斌 乘客Android负责人 自我介绍 自我介绍 自我介绍 滴滴出行乘客端Android负责人 十余年移动终端经验 拥有Android驱动.Framework ...

  9. Mix-Editor图文编辑器----Android图文编辑器

    Android图文编辑 s github地址 https://github.com/javalong/mix-editor 前言 该项目主要是为了方便客户端进行图文编辑.当前版本1.0 如果大家需要的 ...

最新文章

  1. 删除 win10 资源 默认 音乐 视频 文件夹
  2. Ubuntu 16.04 LTS 在anaconda环境下安装pytorch和tensorflow gpu,cuda10.0
  3. mysql存储过程——procedure[prəˈsiːdʒər]
  4. 放大镜制作(2)—此方法比较容易理解
  5. .某学校的学生公寓有14栋楼,用A~N这14个大写字母的其中一个代表楼号,每栋楼的层数为6层,用1~6六个数字表示。每层楼有40个房间,编号为01~40。具体表示一个宿舍房间时,用1个字母加3位数字表
  6. string replaceAll
  7. python def函数报错详解_python自定义函数def的应用详解
  8. 深入理解JAVA中的NIO
  9. 统计学习(三):假设检验与 p-values
  10. FragmentStatePagerAdapter写法
  11. Atitit cio之道 attilax著 2. CIO是企业组织很重要的一个官员,未来就靠信息取胜了 1 3. Cio职责 2 3.1. 企业信息化 对信息技术的利用来实现组织攻略目标 2 3
  12. Golang 从0到1之任务提醒(二)
  13. mm struct与pgd
  14. html语言剖析十六 调色原理
  15. Good Bye 2020 B
  16. ASP.NET Core : 八.图说管道,唐僧扫塔的故事
  17. 创新PC应用、打通云端体验,360小程序引发SaaS软件变革
  18. php 解压dat,如何打开dat文件?
  19. c语言3个数最大公约数和最小公倍数,初学c语言【3】欧几里得算法求最小公倍数和最大公约数...
  20. android 中期检查,基于Android的中小学在线问答系统的中期检查报告.docx

热门文章

  1. 2020版互联网+UI/UE路线图(内含大纲+视频+工具+书籍+面试)
  2. [从零开始学DeepFaceLab-13]: 使用-命令行八大操作步骤-第6步:模型的选择与训练 - 常见基本问题
  3. tqdm 显示其他_详细介绍Python进度条tqdm的使用
  4. DP接口与DVI、HDMI、VGA之间的区别,各优劣在哪
  5. 1 Hadoop 3.2.4分布式环境搭建
  6. onemanager php,Heroku OneManager-php 挂了吗
  7. 中华经典藏书隐私政策
  8. 看完这篇AI算法和笔记,跟面试官扯皮没问题了 | 基于深度学习和传统算法的人体姿态估计...
  9. 开源网管软件-明智的选择
  10. 合力金桥软件被评为中国最佳人力资源典范企业