在Android中使用字体图标(Icon Font)
主要内容
做前端开发的人,对字体图标(iconFont)应该都不陌生(感到陌生的人自己去搜索普及下知识吧(  ̄┏_┓ ̄))。实际原理就是ICON打成字体,然后通过CSS设置字体的样式来生效。
但是,这是在H5相关开发及其延伸开发时用到的。那么,原生Android开发中,应该怎么使用这些图标呢。下面就给大家介绍一下在Android原生开发中的使用方法。
本方法基于Android Studio工程使用,Eclipse的使用者请自行摸索,主要是assets的位置问题。
首先,准备好一个字体图标文件,一般是ttf字体文件,本人准备的是名叫icon.ttf的文件,部分内容如下图。
接下来,在Android Studio中新建工程,File → New → New Project... ,弹窗中选择”Empty Activity“ → 点击 Next → 输入应用名、包名以及工程位置 → 点击Finish完成。如下图
点击Android Studio左上角‘Android’,切换到Project模式,在 app → src → main 下新建文件夹 assets,这里的位置不要错了,Android就认这个位置。将准备好的图标文件(icon.tty)复制到assets文件夹下。
这样,准备工作就完成了,接下来就是在项目中使用它了。
在使用之前,先叨叨两句。Android的Activity的生成和渲染的速度是非常快的,如果你在Activity中加载并使用字体文件,很可能就会造成这个页面轻微卡顿的现象。解决这个问题的方案就是在应用启动时就去加载这个字体文件,在页面中只是使用它。
下面就介绍在代码中怎么使用它。
首先,新建一个MainApp类,继承自Application,在AndroidManifest.xml中application标签中设置android:name指向刚刚新建的MainApp类,让MainApp代替系统默认的Application类。
然后,在MainApp中,复写onCreate()方法,并在这个方法里加载字体文件,这里要用到Android的Typeface字体类,想让页面都可以用到这个字体,那么还要把字体的实例getter一下。代码如下:
package com.test.testiconfont;
import android.app.Application;
import android.graphics.Typeface;
public class MainApp extends Application {
private Typeface typeface;
public Typeface getTypeface() {
return typeface;
}
@Override
public void onCreate() {
super.onCreate();
typeface = Typeface.createFromAsset(getAssets(),"icon.ttf");
}
}
新建空Activity一般都会有一个TextView,内容为“Hello World!”,可以把它利用起来。给这个TextView设置一个Id,如helloWorld,在Java代码中用findViewById将这个View引用起来。然后给它设置字体,并赋值一个字体图标。
在使用字体图标时有一个需要注意的地方,如图1中,星型的值为e915,在Android中这个引用为“”。是的,前后都要加字符,前面加“&#x”,后面加英文分号,这是字体图标的引用值。这个引用不能直接作为字符串使用,需要用Html类转换一下,Activity中完整代码如下:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView helloWorld = findViewById(R.id.helloWorld);
helloWorld.setTypeface(((MainApp)getApplicationContext()).getTypeface());
helloWorld.setText(Html.fromHtml(""));
}
运行代码,可以看到,这个图标已经替换了“Hello World!”的内容。
成功!!!(~ ̄▽ ̄)~
扩展内容
对于编程习惯良好的人来说,上面的代码并不友好。为什么?有字符串硬编码、设置字体不优雅。优化这两块问题也很简单。
一、字符串硬编码
对于,字符串硬编码,可以在工程的strings.xml中设置,比如:
<string name="font_icon_stars"></string>
上面对应的设置代码变成了:
helloWorld.setText(R.string.font_icon_stars);
二、 设置字体
对于设置字体这个,可以自己实现一个TextView的子类,在子类中设置字体,然后在需要用到字体图标的地方使用这个子类即可。
本文地址:https://blog.csdn.net/freedomzcd/article/details/108120855