Android应用离不开应用图标,而Android的碎片化又导致应用的兼容性需要很多额外的处理,通常我们在开发应用用到图标时,需要用到多个drawable目录,根据不同的分辨率大小放入不同大小的图片到drawable-hdpi,drawable-mdpi等等目录,这不仅增加了APK的大小,而且碰到不标准的分辨率还是会出现拉升,变形等各种问题。
Font Awesome可以解决这个问题,Font Awesome在Web开发中已经比较常用了,在Android中使用则不多见,下面介绍下使用方法:
第一步:去下载字体文件,地址:https://github.com/FortAwesome/Font-Awesome/tree/master/fonts,只需要下载fontawesome-webfont.ttf即可,其它我们用不上
第二步:将下载后的文件放在应用的assets目录中
第三步:自定义TextView,代码如下:
public class AwesomeFontTextView extends TextView { private static Typeface mTypeface; public AwesomeFontTextView(Context context, AttributeSet attrs) { super(context, attrs); if (mTypeface == null) { mTypeface = Typeface.createFromAsset(context.getAssets(), "fontawesome-webfont.ttf"); } setTypeface(mTypeface); } }
当然,如果用到的地方比较少,不自定义TextView也是可以的,在Activity的onCreate中指定TextView的字体文件即可。
第四步:定义主类
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
第五步:定义布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center"> <com.example.testtext.AwesomeFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="50sp" android:textColor="#F00" android:text="@string/people" /> <com.example.testtext.AwesomeFontTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="25sp" android:textColor="#0F0" android:text="@string/message" /> </LinearLayout>
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">TestText</string> <string name="people">""</string> <string name="message">""</string> </resources>
注意这里people和message的值中的双引号要去掉,我这里博客中如果不加双引号会显示不出来,实际使用时去掉双引号
可以看到,这里字符串的值使用unicode码表示的,unicode码和图标对应可以查看http://fortawesome.github.io/Font-Awesome/cheatsheet/,该网址中罗列了所有现在支持的图标对应的unicode码。
最后效果图:
总结:AwesomeFont使用unicode码的方式来显示图标,并且可以通过设置textSize和textColor来修改图标的大小和颜色,且不会出现拉升,比传统显示图标的方式要好很多。