在Android手机上,每种字体实际上就是一套图片,每个图片由一个个点阵组成,并赋予一个对应的Unicode编码。同样的道理,我们可以把一些常用的图标也制作成字体格式,分配Unicode编码,并像使用文字一样的使用这些图标,这就是Icon fonts的用法,这种方法经常被用于前端开发中。
相比于使用Drawable对象,Icon fonts有如下优点:
- 不再需要制作存储不同分辨率的drawables,图形资源的大小降低一个数量级
- 可以方便的对icon-fonts进行缩放,改变颜色,改变大小(比如点击前和点击后),添加阴影和光晕等效果
使用效果如下,看起来就像操作一个图标,实际上是在操作一个文本,而且我们不需要存储不同尺寸和不同颜色的图标。
Icon fonts用法也很简单,分四步:
-
将图标生成SVG文件,并将SVG文件转换成字体文件,格式为ttf,同时每个图标对应一个Unicode码,如下图。可以在这个网站进行转换,同时上面有一些做好的图标可以用:https://icomoon.io/app/#/select
-
将生成的ttf字体文件放到assets文件夹
-
在strings.xml中给每个icon-font命名,对应的value就是该Icon的Unicode
使用Typeface.createFromAsset加载字体文件,通过setTypeface给TextView设置字体,然后就可以像文字一样给它设置颜色,大小等属性了
Typeface font = Typeface.createFromAsset(getAssets(), "icomoon.ttf");
cameraTV.setTypeface(font);
cameraTV.setText(R.string.ic_camera);
cameraTV.setTextSize(TypedValue.COMPLEX_UNIT_SP, 30);
cameraTV.setTextColor(getResources().getColor(R.color.yellow));
Done