一、 主要代码文件
frameworks/base/graphics/java/android/graphics/fonts/
├── FontCustomizationParser.java
├── FontFamily.java
├── FontFileUtil.java
├── Font.java
├── FontStyle.java
├── FontVariationAxis.java
└── SystemFonts.java
二、Font、FontFamily、TypeFace的关系
重点要理清楚 Font、FontFamily、TypeFace这几者的关系
还是以代码来解释吧,不码那么多文字说明了。
情况1. 用单个字体文件创建Typeface
Font font = new Font.Builder("your_font_file.ttf").build();
FontFamily family = new FontFamily.Builder(font).build();
Typeface typeface = new Typeface.CustomFallbackBuilder(family).build();
情况2. 用多个字体文件创建Typeface并设置粗体为默认字体
Font regularFont = new Font.Builder("regular.ttf").build();
Font boldFont = new Font.Builder("bold.ttf").build();
FontFamily family = new FontFamily.Builder(regularFont)
.addFont(boldFont).build();
Typeface typeface = new Typeface.CustomFallbackBuilder(family)
.setWeight(Font.FONT_WEIGHT_BOLD) //设置默认为粗体
// 如果font family没有粗体样式
// 系统将会用最相似的字体
.build();
情况3. 用单个字体文件创建Typeface, 如果字体字库不完整,就用系统默认的"serif"字体代替
Font font = new Font.Builder("your_font_file.ttf").build();
FontFamily family = new FontFamily.Builder(font).build();
Typeface typeface = new Typeface.CustomFallbackBuilder(family)
.setSystemFallback("sans-serif") // 设置serif 字体为备用字体,sans-serif是系统默认字体
.build();
情况4. 用单个字体文件创建Typeface,并设置另外一个字体文件为备用字体
Font font = new Font.Builder("English.ttf").build();
FontFamily family = new FontFamily.Builder(font).build();
Font fallbackFont = new Font.Builder("Arabic.ttf").build();
FontFamily fallbackFamily = new FontFamily.Builder(fallbackFont).build();
Typeface typeface = new Typeface.CustomFallbackBuilder(family)
.addCustomFallback(fallbackFamily) // 备用的特殊字体.
.setSystemFallback("serif") // 备用系统默认字体
.build();