在android项目中使用FontAweSome图标集,可以方便的适配各种屏幕分辨率,不必在各种不同分辨率文件夹中新建资源文件。使用字体是一种很巧妙的方法,把图像以字体的方式呈现,这样以前设置为android:background的属性,现在只需要设置android:text就可一搞定,而且还可一适配不同的分辨率。

在XML文件中设置字体时,只需要指定android:typeface属性即可,但是 这个值只支持系统内置的几种字体。

导入FontAwesome字体,需要在项目中导入第三方字体。方式是在assets目录中新建一个fonts目录,然后将我们需要的ttf文件导入即可。以FontAwesome为例,git clone FontAwesome的地址为https://github.com/FortAwesome/Font-Awesome.git  ,下载之后在提取fonts目录下的fontawesome-webfont.ttf文件拷贝到fonts目录中。

建立一个帮助类:

 public class FontManager {
public static final String root = "fonts/";
public static final String FONTAWESOME = root + "fontawesome-webfont.ttf"; public static Typeface getTypeFace(Context context, String font) {
return Typeface.createFromAsset(context.getAssets(), font);
} }

布局文件:

 <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root"
tools:context=".MainActivity"> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal"> <TextView
android:id="@+id/tv1"
android:layout_width="0dp"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:textColor="#00BFFF"
android:textSize="22sp"
android:typeface="monospace"
android:text="@string/ambulance"/> <TextView
android:id="@+id/tv2"
android:layout_width="0dp"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="22sp"
android:textColor="#87CEFA"
android:text="@string/bicycle"/> <TextView
android:id="@+id/tv3"
android:layout_width="0dp"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="22sp"
android:textColor="#00CED1"
android:text="@string/bus"/>
<TextView
android:id="@+id/tv4"
android:layout_width="0dp"
android:layout_height="45dp"
android:layout_weight="1"
android:gravity="center"
android:textSize="22sp"
android:textColor="#CD5C5C"
android:text="@string/train"/>
</LinearLayout>
</RelativeLayout>

strings.xml:

 <resources>
<string name="app_name">FontAwesomeMotion</string>
<string name="ambulance"></string>
<string name="bus"></string>
<string name="bicycle"></string>
<string name="train"></string>
</resources>

在strings.xml的资源文件中,这样资源string,代表了不同的图标。可以通过 http://fortawesome.github.io/Font-Awesome/cheatsheet/  查询具体的图标。

 package com.app.motiongear.fontawesomemotion;

 import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView; import com.app.motiongear.utils.FontManager; import java.lang.reflect.Type; public class MainActivity extends AppCompatActivity { RelativeLayout mContainer; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Typeface tf = FontManager.getTypeFace(this, FontManager.FONTAWESOME);
mContainer = (RelativeLayout) this.findViewById(R.id.root);
for (int i = 0; i < mContainer.getChildCount(); i++) {
View currentView = mContainer.getChildAt(i);
if (currentView instanceof TextView) {
((TextView) currentView).setTypeface(tf);
}
} }
}

实际的显示效果如下:

在android项目中使用FontAwesome字体的更多相关文章

  1. Android 项目中文件夹的说明与作用(转)

    (转自:http://blog.csdn.net/goodshot/article/details/11529731) Android 项目中文件夹的作用 1. src:存放所有的*.java源程序. ...

  2. android项目中配置NDK自动编译生成so文件

    1 下载ndk开发包   2 在android 项目中配置编译器(以HelloJni项目为例)  2.1 创建builer  (a)Project->Properties->Builder ...

  3. android XMl 解析神奇xstream 一: 解析android项目中 asset 文件夹 下的 aa.xml 文件

    简介 XStream 是一个开源项目,一套简单实用的类库,用于序列化对象与 XML 对象之间的相互转换. 将 XML 文件内容解析为一个对象或将一个对象序列化为 XML 文件. 1.下载工具 xstr ...

  4. 对Android项目中的文件夹进行解释

    对Android项目中的文件夹进行解释: · src:里面存放的是Activity程序,或者是以后的其他组件,在此文件夹之中建立类的时候一定要注意,包名称不能是一级. · gen:此文件夹中的内容是自 ...

  5. android项目中如何加载已有so库 <转>

    1,在项目根目录下建立文件夹libs/armeabi文件夹 2,将so库放入 libs/armeabi文件夹 注意事项: 1,如果采用静态注册的方式请注意C文件中严格按照命名规则 Java_packa ...

  6. 在Android项目中启用Java 8的部分特性--Lambda & Method References

    Android N发布时同时发布了一个新的编译工具Jack(AS2.1+支持),基于Jack我们可以使用Java 8 的部分特性,在低版本机器上能使用的更少,同时Jack也有诸多不完善,工具链的改变难 ...

  7. Android项目中如何用好构建神器Gradle?(转)

    最近在忙团队并行开发的事情,主要是将各个团队的代码分库,一方面可以降低耦合,为后面模块插件化做铺垫,另一方面采用二进制编译,可以加快编译速度.分库遇到了一些问题,很多都要通过Gradle脚本解决,所以 ...

  8. android项目中刷新activity界面

    android项目中在sqlite数据库插入/更新/删除数据后: 1. 刷新当前activity界面数据(手动刷新): 在activity类下新增一个refresh()方法: /** * 刷新, 这样 ...

  9. 举例android项目中的string.xml出现这个The character reference must end with the ';' delimiter.错误提示的原因及解决办法

    今天在一个android项目中的string.xml中写这样一个字符串时出现了下面这个错误提示: The reference to entity "说明" must end wit ...

随机推荐

  1. 《机器学习_08_代价敏感学习_添加sample_weight支持》

    简介 这一节主要是为模型打补丁,在这之前笔者已经介绍并实现了几种典型的机器学习模型,比如线性回归.logistic回归.最大熵.感知机.svm等,但目前它们都有一个共性,那就是构造的损失函数对每个样本 ...

  2. Java——变量自增(++)自减(--)

    //运算符在操作数之后,称为“后增量”.i变量自增,返回自增之前的值;//运算符在操作数之前,称为“前增量”.i变量自增,返回自增之后的值.//自减同理 public static void test ...

  3. Java——Json字符串与Object互转

    public static void JacksonTest() {//推荐 //{"MNG001":[{"ID":"1","PW ...

  4. shiro认证通过之后的授权

    subject.hasRole("") ; subject.hasRoles(List); subject.hasAllRoles(); subject.isPermitted(& ...

  5. 对vue双向绑定的思考

    对于数组 直接更改数组里面的项的值是不会有view响应的,如: <ul> <li v-for="item in test"> {{ item }} < ...

  6. 选择器&隔行换色

    选择器的使用理解为:执行jQuery核心函数,传入选择器的字符串    $( ... ) 基本选择器 <!DOCTYPE html> <html> <head> & ...

  7. UWP开发入门(25)——通过Radio控制Bluetooth, WiFi

    回顾写了许久的UWP开发入门,竟然没有讲过通过Windows.Devices.Radios.Radio来控制Bluetooth和WiFi等功能的开关.也许是因为相关的API设计的简单好用,以至于被我给 ...

  8. 网络编程-TCP长连接和短连接

    TCP是一个面向连接的协议.无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接.下面会介绍一个TCP连接是如何建立的以及通信结束后是如何终止的. 一.TCP连接的建立与终止 1.1 建立连 ...

  9. brpc长连接问题

    问题: 使用了brpc的长连接,但是为何耗时和短链接一样呢? brpc文档里介绍,使用http协议,则默认使用pooled,只要连接数不超过max_connection_pool_size,则都可以使 ...

  10. 【Redis面试题】如何使用Redis实现微信步数排行榜?

    1. 前言 之前写过一篇博客,讲解的是Redis的5种数据结构及其常用命令,当时有读者评论,说希望了解下这5种数据结构各自的使用场景,不过一直也没来得及写. 碰巧,在3月份找工作面试时,有个面试官先问 ...