先来说一下字体图标的优缺点吧~
优点:
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/
图标库选择自己要用的图标下载,下载后得到个压缩文件并解压,最后得到一个压缩文件,解压后得到如下文件,其实我们需要的只有两个,就是我框出的那两个文件
有一些不是你下载,你不知道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);
}
效果如下图所示: 图标原来是灰色,这里我指定了是蓝色
就是这么简单完事。但是我们发现在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是󡔗 总共是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的为什么造成崩溃,百度好多也没有什么好的解决办法,如果你看到这里,你也可以去尝试解决一下然后告诉我阿~