Android加载字体包及封装
发布日期:2021-05-14 09:35:28 浏览次数:25 分类:精选文章

本文共 1929 字,大约阅读时间需要 6 分钟。

Android自定义TextView加载字体包

在Android开发中,往往需要为特定控件设置不同的字体。TextView控件是Android中最常用的文本显示控件之一,通过简单的方式即可实现字体包的加载。以下是关于如何在不同需求背景中实现字体包加载的详细说明。


1. 基始实现

要实现TextView加载字体包,可以按照以下步骤进行操作:

Typeface typeFace = Typeface.createFromAsset(getAssets(), "fonts/Bold.otf");
textView.setTypeface(typeFace);

字体包位置

字体包的位置默认在assets/fonts目录中。如若需要更换字体包的位置,可自行调整路径。在实际项目中,建议将字体包放在assets/fonts以便于资源管理和版本控制。

较多需求场景

随着项目的发展,有时会出现以下需求:

  • 部分TextView加载字体包
  • 每个TextView加载的字体包可以不同

2. 实现封装

为了满足上述多样化需求,可以通过封装TextView控件,将字体加载的逻辑进行归类和扩展。

2.1 定义属性

首先,定义一个自定义属性,供xml中使用:

2.2 创建自定义控件

继承自AppCompatActivity,并实现如下逻辑:

public class FontTextView extends AppCompatTextView {
private final int BOLD = 1;
private final int HEAVY = 2;
public FontTextView(Context context) {
super(context);
}
public FontTextView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public FontTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.FontTextView, defStyleAttr, 0);
int fontType = a.getInt(R.styleable.FontTextView_fontType, 1);
String fontPath = "";
switch (fontType) {
case BOLD:
fontPath = "fonts/Bold.otf";
break;
case HEAVY:
fontPath = "fonts/Heavy.otf";
break;
default:
break;
}
if (!TextUtils.isEmpty(fontPath)) {
Typeface typeFace = Typeface.createFromAsset(getContext().getAssets(), fontPath);
setTypeface(typeFace);
}
}
}

2.3 使用示例

在布局文件中controllers之外添加:

2.4 字体包加载逻辑

通过自定义属性app:fontType,根据不同的值加载不同的字体包。逻辑清晰,易于扩展。


效果展示

通过以上方法,可以轻松实现不同TextView显示不同的字体效果。像这样的功能,对于需要在多个场景中使用不同的字体包的项目来说,是非常实用的。


以上方式既满足了基本的字体加载需求,也通过封装实现了灵活化配置的可能,适用于多种项目场景。

上一篇:什么?你连个三色渐变圆角按钮都需要UI切图?
下一篇:LinkedList源码分析

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月20日 02时11分37秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章