「这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战」
Android使用自定义字体
有时候界面在设计app时会使用一些比较美观的字体,在安卓中使用起来也并不困难,随着安卓SDK的更新,它的实现方式也有所不同,该文章来看看怎么实现自定义字体。
普通方法
设置字体。 TextView.setTypeface(Typeface)
public void setTypeface(@Nullable Typeface tf) {
}
那么我们也很简单,直接创建一个Typeface,然后TextView的设置Typeface就可以了。
需求场景是这样的,我们从服务器下载了很多个字体,让用户去选择字体,那么在选择字体的界面,也要把字体预览出来。
先看一张效果图
我们要做就是将字体下载,然后在适配器中设置字体即可。来看看适配器中的代码:
public class FontAdapter extends BaseRecyclerViewAdapter<FontInfo> {
public FontAdapter(@Nullable List<FontInfo> data) {
super(R.layout.item_font, data);
}
@Override
public void convert(BaseViewHolder helper, FontInfo item, int position) {
// 显示字体名称
TextView textView = helper.getView(R.id.item_font_name);
textView.setText(item.getName());
String fontPath = FontManager.getFontPathByCoding(item.getId());
Typeface typeface = Typeface.createFromFile(fontPath);
if (typeface != null)
textView.setTypeface(typeface);
}
}
这段代码中没有很复杂的地方,从服务器下载到本地的代码已经省去,我们要做的是获取本地的字体路径,然后进行显示,这里要注意的地方时一定要注意typeface
的非空判断,不然程序会闪退。
Fonts in XML
Fonts in XML
是Android 8.0中推出的功能,这意味着我们可以像使用R.string.xx那样使用Font资源,能够像使用其他资源文件一样使用字体,这样替换全局的字体的就会更加简单。使用它呢,就@font/myfont
或 R.font.myfont
就可以,来看看具体如何实现吧。
1. 创建font目录
鼠标移动到res文件夹,然后右键,然后 New > Android resource directory,然后在Resource type
选择font,目录名也必须要为font,否则无法识别。参考下面的图。
2. 添加字体和引用
将一个或者多个字体文件复制到font文件夹下,文件格式支持ttf和otf。复制进来之后,我们开始使用它,我们可以通过@font/myfont
或 R.font.myfont
来使用,我们也可以在style文件中创建一个样式,目的是为了统一,方便直接在配置文件的xml中引用。
<style name="FontStyle" parent="AppTheme">
<item name="android:fontFamily">@font/font_1</item>
</style>
3. 使用字体
如何使用字体呢?
<activity
android:name=".MainActivity"
android:theme="@style/FontStyle">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
当然也可以全局使用
<application
android:theme="@style/FontStyle">
</application>