iconify 安卓字体图标的使用详解

2023-11-01

图片资源是我们app开发中经常使用的,同时图标我们也经常使用,比如常见的扫码icon,消息icon这都是字体图标。

一、为什么要使用字体图标?

普通图片:

图片大时---->app 变大
分辨率变化频繁或者大时---->图片很难高保帧

字体图标:

属于字体 基于svg 伸缩不失真

二、安卓字体图标库

github项目地址

在这里插入图片描述

三 、具体使用

1 、gradle依赖添加

github地址中提供了好多库

dependencies {
    compile 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2' // (v4.5)
    compile 'com.joanzapata.iconify:android-iconify-entypo:2.2.2' // (v3,2015)
    compile 'com.joanzapata.iconify:android-iconify-typicons:2.2.2' // (v2.0.7)
    compile 'com.joanzapata.iconify:android-iconify-material:2.2.2' // (v2.0.0)
    compile 'com.joanzapata.iconify:android-iconify-material-community:2.2.2' // (v1.4.57)
    compile 'com.joanzapata.iconify:android-iconify-meteocons:2.2.2' // (latest)
    compile 'com.joanzapata.iconify:android-iconify-weathericons:2.2.2' // (v2.0)
    compile 'com.joanzapata.iconify:android-iconify-simplelineicons:2.2.2' // (v1.0.0)
    compile 'com.joanzapata.iconify:android-iconify-ionicons:2.2.2' // (v2.0.1)
}

我们在项目中添加我们需要的即可 通常fontawesome库ionicons 就足够了。

  //字体图标库
    implementation 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'
    implementation 'com.joanzapata.iconify:android-iconify-ionicons:2.2.2'

ps:我们在file 、 project structure 、dependencies 中搜索jar也可以添加。

2、初始化工作

在我们的自定义application下进行初始化(如果你在gradle中添加了所有的库,初始化如下)

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        Iconify
            .with(new FontAwesomeModule())
            .with(new EntypoModule())
            .with(new TypiconsModule())
            .with(new MaterialModule())
            .with(new MaterialCommunityModule())
            .with(new MeteoconsModule())
            .with(new WeathericonsModule())
            .with(new SimpleLineIconsModule())
            .with(new IoniconsModule());
    }
}

我们的项目中(如下图先忽略第三个)

在这里插入图片描述

3、 使用字体图标
<com.joanzapata.iconify.widget.IconTextView
    android:text="I {fa-heart-o} to {fa-code} on {fa-android}"
    android:shadowColor="#22000000"
    android:shadowDx="3"
    android:shadowDy="3"
    android:shadowRadius="1"
    android:textSize="40sp"
    android:textColor="#FF..."
    ... />

1 xml中直接使用即可(十分简单就可以运行试试了)
2 字体图标我们就把他当字体使用就行,只是这个字体是个图片。
3 特别注意 text这个属性,我们要使用{xxx}的形式 其中xxx为字体图标库中定义的图标名。

四、过程分析

如上案例中xml中text属相为啥要写成 android:text="{fa-heart-o} " 这种形式呢?其实这里使用了Font Awesome这个依赖库中的字体图标。

implementation 'com.joanzapata.iconify:android-iconify-fontawesome:2.2.2'

//这个他们封装好的字体图标库
1 、我们翻翻我们初始化的地方

在这里插入图片描述

2、鼠标右键进入:

在这里插入图片描述

1 我们可以看出 这里他定义了FontAwesomeModule类,实现IconFontDescriptor接口
2 接口中他首先返回 xxx.ttf字符串这里我们先不管。继续看 还返回了FontAwesomeIcons.values()

3、 鼠标右键进入FontAwesomeIcons
package com.joanzapata.iconify.fonts;

import com.joanzapata.iconify.Icon;

public enum FontAwesomeIcons implements Icon {
    fa_glass('\uf000'),
    fa_music('\uf001'),
    fa_search('\uf002'),
    fa_envelope_o('\uf003'),
    fa_heart('\uf004'),
    fa_star('\uf005'),
    // 局部  下面都是fa_xxx("xxx")此处为了方便就不贴完了。

    char character;

    FontAwesomeIcons(char character) {
        this.character = character;
    }

    @Override
    public String key() {
        return name().replace('_', '-');
    }

    @Override
    public char character() {
        return character;
    }
}

1 如上代码 源码中定义了枚举类 实现接口Icon
2 枚举中定义了个char 类型character 字段 并通过构造进行初始化
3 返回函数中进行了字符串处理 然后返回字符
4 源码中的
fa_glass(’\uf000’),
fa_music(’\uf001’),
fa_search(’\uf002’),
fa_envelope_o(’\uf003’),
fa_heart(’\uf004’),
fa_star(’\uf005’),
等等,就是我们在xml中使用的名字。这些都是Font Awesome中提供的图标

4 更多Font Awesome图标使用
Font Awesome 官网

首先我们进入官网
在这里插入图片描述
点击图标库
在这里插入图片描述
这里搜索我们想要的图标就行(比如搜索 coffee 点击进入)
在这里插入图片描述

在这里插入图片描述

把这个fa-coffee 放到xml的text属性中运行就可以看到 咖啡图标了。

五、 自定义字体图标库

如上 三.2 的图片中还记的我们 .with(new FontModel()); 这段代码吗?这其实是对我们自定义的字体图标库进行初始化。

我们都知道阿里有个矢量图标库(图标贼丰富): 地址连接
我们如果想要使用这上面的图标,这时我们就要自定义了。

1、首先搜索几个图标加入购物车

在这里插入图片描述

2 、如下图我添加了两个图标(添加后进行下载)

在这里插入图片描述

下载文件解压如下:
在这里插入图片描述

两个重要的文件:
1 ttf文件
2 index html文件

3 拷贝 ttf文件到我们的asset文件夹下

在这里插入图片描述

4 开始仿照(参考上文FontAwesomeModule分析过程)FontAwesomeModule 定义我们自己的字体图标

4.1定义类

package com.example.administrator.modelmall.icon;

import com.joanzapata.iconify.Icon;
import com.joanzapata.iconify.IconFontDescriptor;

/**
 * Create by SunnyDay on 2019/03/17
 *
 * 自定义字体图标模块
 *
 * 使用其他的第三方字体图标
 */
public class FontModel implements IconFontDescriptor {
    /**
     * 返回下载的ttf文件
     * */
    @Override
    public String ttfFileName() {
        return "iconfont.ttf";
    }

    /**
     * 返回个icon类型数组
     *
     * */
    @Override
    public Icon[] characters() {
        return  IconModel.values();
    }
}

1 如上我们定义类实现IconFontDescriptor 接口
2 ttfFileName()中我们返回我们拷贝到assets下的ttf完整文件名
3 characters() 方法中我们返回自定义枚举值

4.2自定义枚举类

package com.example.administrator.modelmall.icon;

import com.joanzapata.iconify.Icon;

/**
 * Create by SunnyDay on 2019/03/17
 * <p>
 * 实现 Icon 接口
 */
public enum IconModel implements Icon {
    // &#xe6c3  支付宝
    // &#xe502  扫一扫
    icon_scan('\ue502'),
    icon_ali_pay('\ue6c3');

    private char character;
    IconModel(char character) {
        this.character = character;
    }

    /**
     * 参考 font
     */
    @Override
    public String key() {
        return name().replace('_', '-');
    }

    @Override
    public char character() {
        return character;
    }
}

如上写法和FontAwesome 十分类似 也是实现接口,定义个字段,两个方法的返回值我们也可以直接摘抄。

重点:枚举实例的编写
在这里插入图片描述
还记得我们上文中的index_demo.html 文件吗? 打开
在这里插入图片描述

枚举类中我们随便取两个实例名:吧相应的编码拷贝来作为参数,这里需要把&#x 变为\ue就行了。

5 使用(十分简单xml中直接{类名}就ojbk了)

ps:别忘了在application注册下我们自定义的字体图标

简单使用:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout 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.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:background="@color/orange">

        <android.support.v7.widget.LinearLayoutCompat
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <com.joanzapata.iconify.widget.IconTextView
                android:gravity="center"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_gravity="left"
                android:layout_weight="1"
                android:paddingLeft="10dp"
                android:text="{icon-scan}"
                android:textColor="@color/white"
                android:textSize="25sp"
                tools:ignore="HardcodedText" />

            <android.support.v7.widget.AppCompatEditText
                android:gravity="center"
                android:hint="search here"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="5"
                tools:ignore="HardcodedText" />

            <com.joanzapata.iconify.widget.IconTextView
                android:gravity="center"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_gravity="right"
                android:layout_weight="1"
                android:paddingRight="10dp"
                android:text="{fa-comment-o}"
                android:textColor="@color/white"
                android:textSize="25sp"
                tools:ignore="HardcodedText" />

        </android.support.v7.widget.LinearLayoutCompat>
    </android.support.v7.widget.Toolbar>
</android.support.constraint.ConstraintLayout>

如上xml代码 我们一个使用了FontAwesomeModule的,字体图标库提供好的,一个是使用我们自定义的。

效果图:
在这里插入图片描述

六 、小结

本文就简单的讲解下具体使用IconTextView加载字体图标的具体使用,及其自定义过程详解,IconDrawable的使用参考github项目的示例

ps:新版安卓studio使用字体图标有坑

The end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iconify 安卓字体图标的使用详解 的相关文章

随机推荐

  • QHash的使用(插入、取值、遍历、删除)

    1 创建 键值对的方式插入 数据类型随意 这里以键int 值QString示例 QHash
  • 200行代码写一个简易的C++小黑窗贪吃蛇游戏

    分享一个简易的小黑窗贪吃蛇 一共就两百行代码左右 包含注释 很适合初学者巩固语法来练练手 如果后续需要其他功能也可以再添加 先小小展示一下 源码在文末免费领取 使用工具 VS2019 不是用VS的也可以直接找出cpp和h文件复制到你们用的I
  • 在 RedHat 8.7 中 安装 ROCm

    1 official docs 1 1 graphics docs Overview amdgpu graphics and compute stack unknown build documentation 1 2 compute doc
  • 异步加载Baidu地图失败error isTrusted:true

    为什么会加载失败 为了用户体验 在用户使用地址组件之前不加载地图 因此我们采用官网的例子异步加载百度地图 这里做了一点改进 export function baiduMapInit const url https api map baidu
  • Ajax-爬取多页图片

    文章目录 一 目的 二 代码 三 结果 四 关键点 一 目的 爬取多页图片 图片网页地址 https picsum photos images 关键点 上述的网页HTML代码中并无图片地址 图片是通过Ajax请求的json数据 我们需要找到
  • Python创建虚拟环境

    目的 不同的程序需要不同的运行环境 方法 conda create n 虚拟环境名 python3 8 结果 在anaconda envs 目录下有一个新的目录 里面是一个全新的python 1 设置pip国内源 原因 python编程经常
  • KVM模块单独编译(适合调试)

    当前系统环境 CentOS Linux release 7 2 1511 Core 在说kvm模块单独编译之前 难免设计到linux内核模板的编写 所以这里也稍微提一下 1linux内核模块环境搭建 这里有2种方法 1 1 升级内核 升级当
  • 指令报错总结

    指令1 rosdep update 报错 error loading sources list The read operation timed out 解决博文 https blog csdn net weixin 44028876 ar
  • Flutter(一):Flutter环境的搭建

    前言 正好在研究flutter 把它系统化的整理一下
  • RBF神经网络和拟合实例

    RBF神经网络及拟合实例 RBF神经网络介绍 RBF神经网络结构 RBF神经网络算法 RBF神经网络逼近算法 采用RBF神经网络逼近非线性函数 神经网络逼近结果 代码如下 RBF神经网络介绍 RBF神经网络结构 径向基函数 Radial B
  • Task2:用T-SQL语句创建数据表

    Task2 用T SQL语句创建数据表 例1 使用T SQL语句操作创建用户信息表 表名为Users 任务要求 1 输入代码 2 全屏截图 分析题意 创建Users数据表的T SQL语句如下所示 use testdb 使用名为testdb的
  • Acwing-861. 二分图的最大匹配

    include
  • ChatGPT影响不可逆,与AI“共存”才是大趋势

    不久前 英国24所顶尖大学联合宣布要撤销ChatGPT禁令 不但联合宣布允许学生和教职员工在合乎道德的情况下使用生成式人工智能 还宣布学校会亲自指导学生使用 此消息一出来可是让英国留学生们炸开了锅 几个月前 二十多所英国学校联合宣布明确禁止
  • yii2-ueditor

    扩展下载 yii2 0 ueditor 框架下载 Yii 2 0 6 高级版 描述 最佳适用于yii2 0 高级版 advanced 应用框架 对于基础板 basic 及其他框架要修改对应的命名空间即可使用 效果演示 版本相关 Yii 2
  • Redis主从架构:主从同步和哨兵机制

    Redis主从架构 主从同步和哨兵机制 一 Redis主从架构 二 主从同步 2 1 引入 2 2 原理 1 全量同步 2 增量同步 3 优化Redis主从集群 2 3 总结 三 哨兵机制 3 1 引入 3 2 作用 3 3 原理 1 状态
  • Java并发编程学习15-任务关闭(下)

    任务关闭 下 任务关闭 由于篇幅较多 拆分了两篇来介绍各种任务和服务的关闭机制 以及如何编写任务和服务 使它们能够优雅地处理关闭 1 处理非正常的线程终止 我们知道 当单线程的控制台程序由于发生了一个未捕获的异常而终止时 程序将停止运行 并
  • Neo4j导入csv文件

    注意啊 Neo4j导入的是CSV文件 有些小伙伴导入的时候没看清楚 直接导入的是xlsx文件 这是导不进去的哈 要做的就是把xlsx另存为CSV文件 防止乱码 可以选择UTF 8 以下面的表格为例 来进行详细地说明 首先 导入实体1 注意
  • string lastIndexOf() 常用方法

    string lastIndexOf 方法 查找某个字符或字符串 String Str new String 菜鸟教程 www runoob com 查找字符 o 最后出现的位置 System out println Str lastInd
  • 我的创作纪念日---256天的坚持与成长:我的CSDN创作之旅

    大家好 我在CSDN上已经坚持了256天的创作 这对我来说是一个了不起的成就 在这特殊的日子里 我想要用一篇博客来记录下我的创作心路历程 收获与成就 学到的教训以及未来的展望 也借此机会 向一直支持我的人们表达我的感激之情 回顾旅程 从初心
  • iconify 安卓字体图标的使用详解

    图片资源是我们app开发中经常使用的 同时图标我们也经常使用 比如常见的扫码icon 消息icon这都是字体图标 一 为什么要使用字体图标 普通图片 图片大时 gt app 变大 分辨率变化频繁或者大时 gt 图片很难高保帧 字体图标 属于