先来说一下字体图标的优缺点吧~

优点: 

      1. 可以高度自定义图标的样式(包括大小和颜色),对于个人开发者尤其适用 

      2. 可以减少项目和安装包的大小(特别你的项目中有很多图片icon时,效果将是M级) 

      3. 几乎可以忽略屏幕大小和分辨率,做到更好的适配

      4. 使用简单 

      …… 


缺点: 
      1. 只能是一些简单的icon,不能代替如背景图、9图等资源 

      2. 一些需要文字说明的icon,图片资源将会是更好的选择 

      3. 对设计的要求更高,不同icon可能拥有不同的边距,这时要切换icon时还要设置大小 

      4. 由于边距的存在可能存在无法填满控件的情况 

      5. 无法在Android studio中进行实时预览

iconfont对于客户端应用来说有很多便捷:

      1、自由变化大小

      2、自由修改颜色

      3、可以添加一些视觉效果如:阴影、旋转、透明度。

      4、比单位的图片更节省资源

操作步骤



第一步:. 首先去 http://www.iconfont.cn/ 图标库选择自己要用的图标下载,下载后得到个压缩文件并解压,最后得到一个压缩文件,解压后得到如下文件,其实我们需要的只有两个,就是我框出的那两个文件



Android使用usbkey android使用icon图标_iconfont



有一些不是你下载,你不知道unicode的图标可以下载 Fontlab stadio 这个软件去查看对应的unicode



第二步:打开 res/values/strings.xml,添加 string 值;

<string name="icon"></string>


第三步: 打开 activity_main.xml,添加 string 值到 TextView:在这里你可以调整图标的大小,颜色


<TextView
  android:id="@+id/text"
android:textColor="@color/colorPrimary"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="@string/icon" />

第四步:在MainActivity

为 TextView 指定字体图标

protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 
  Typeface iconfont = Typeface.createFromAsset(getAssets(), "iconfont/iconfont.ttf");
  TextView textview = (TextView)findViewById(R.id.text);
  textview.setTypeface(iconfont);
}


效果如下图所示: 图标原来是灰色,这里我指定了是蓝色



Android使用usbkey android使用icon图标_iconfont_02






就是这么简单完事。但是我们发现在activity 代码中setTypeface 很没有必要。因为我们整个应用有很多页面都需要设置字体图标时,这样设置会有很多,垃圾代码产生。这时我们可以用一个简单的自定义view去继承TextView 就解决问题,代码如下



public class IconView extends TextView {
    public IconView(Context context) {
        super(context);

    }


    public IconView(Context context, AttributeSet attrs) {
        super(context, attrs);
        initView(context);
    }

    private void initView(Context context) {
        Typeface typeface = Typeface.createFromAsset(context.getAssets(),"iconfont.ttf");
        setTypeface(typeface);
    }

然后在布局文件中使用这个自定义View即可



<com.example.wpschen.myapplication.IconView
        android:id="@+id/text"
        android:textSize="20sp"
        android:textColor="@color/colorPrimary"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/icon" />



最后提一个我遇到的小问题,最开始我下载的图标的unicode是&#xe1517 总共是8位数,但每次一运行就崩溃,会报这样的错误



03-01 17:12:41.020 4970-4970/com.example.wpschen.myapplication E/dalvikvm: Could not find class 'android.graphics.drawable.RippleDrawable', referenced from method android.support.v7.widget.AppCompatImageHelper.hasOverlappingRendering
03-01 17:12:41.055 4970-4970/com.example.wpschen.myapplication E/dalvikvm: VM aborting
03-01 17:12:41.055 4970-4970/com.example.wpschen.myapplication A/libc: Fatal signal 6 (SIGABRT) at 0x0000136a (code=-6), thread 4970 (n.myapplication)



最后又换了一个图标资源,unicode是常见的7位数,这样才得以解决,但至于8位数unicode的为什么造成崩溃,百度好多也没有什么好的解决办法,如果你看到这里,你也可以去尝试解决一下然后告诉我阿~