在Android中使用字体图标(Icon Font)

主要内容

做前端开发的人,对字体图标(iconFont)应该都不陌生(感到陌生的人自己去搜索普及下知识吧(  ̄┏_┓ ̄))。实际原理就是ICON打成字体,然后通过CSS设置字体的样式来生效。
但是,这是在H5相关开发及其延伸开发时用到的。那么,原生Android开发中,应该怎么使用这些图标呢。下面就给大家介绍一下在Android原生开发中的使用方法。

本方法基于Android Studio工程使用,Eclipse的使用者请自行摸索,主要是assets的位置问题。


首先,准备好一个字体图标文件,一般是ttf字体文件,本人准备的是名叫icon.ttf的文件,部分内容如下图。

图1


接下来,在Android Studio中新建工程,File → New → New Project... ,弹窗中选择”Empty Activity“ → 点击 Next → 输入应用名、包名以及工程位置 → 点击Finish完成。如下图

图2


点击Android Studio左上角‘Android’,切换到Project模式,在 app → src → main 下新建文件夹 assets,这里的位置不要错了,Android就认这个位置。将准备好的图标文件(icon.tty)复制到assets文件夹下。

图3


这样,准备工作就完成了,接下来就是在项目中使用它了。


在使用之前,先叨叨两句。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">&#xe915;</string>
上面对应的设置代码变成了:
    helloWorld.setText(R.string.font_icon_stars);


二、 设置字体

对于设置字体这个,可以自己实现一个TextView的子类,在子类中设置字体,然后在需要用到字体图标的地方使用这个子类即可。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值