在react-native中添加高可维护的iconfont字体

字体图标盛行的年代,在项目里使用一套不失真又可以随意改变大小颜色的图标,是多么舒服的一件事。这里要推荐iconfont.cn,超多免费图标,当然了,你的专属美工也可以自己建个项目并上传自己的字体图标。

但是有一件很悲伤的事情,iconfont字体,在RN中不能像web端一样直接使用。所以有了下面的教程(福利:比一般教程都精简,笔者用shell脚本替你手动处理了很多事情)

1、下载

假设你已经在iconfont网站建好项目,那么进入项目页面,点击下载按钮
下载

下载完之后,解压,将其中的iconfont.cssiconfont.ttf复制到你的项目中,假设你是放到项目根目录的static/目录下面。

2、安装插件

想了解细节的点击传送门

npm install react-native-vector-icons --save

3、JSON映射

研究源码你会发现,每套字体都会附上一个json文件,就是名称和位置之间的关系。而iconfont是没有提供json文件的。没关系,笔者已经为你们准备好了,请保存到文件中,假设你的文件名叫create-iconfont-json.js

const fs = require('fs');
const generateIconSetFromCss = require('react-native-vector-icons/lib/generate-icon-set-from-css');
// 和你刚才保存的iconfont字体文件在一起,方便管理
const cssDir = __dirname + '/static/';
const iconSet = generateIconSetFromCss(cssDir + 'iconfont.css', 'icon-');

fs.writeFileSync(cssDir + 'iconfont.json', iconSet);

4、复制字体

这个插件包有好多套字体,我们可以需要把自己的iconfont也复制到包中对应文件夹,当然了,不可能手动复制,笔者从来都是解放双手的。
给大家准备了一个shell脚本,你需要保存到根目录,假设你命名为copy-font.sh


# 先生成json文件
node create-iconfont-json.js

# 包自带的字体10几套,占空间,如果你需要那些字体库,把下面这行注释
rm -rf node_modules/react-native-vector-icons/Fonts/*
cp -f static/iconfont.ttf node_modules/react-native-vector-icons/Fonts/

# 链接到android和ios
react-native link react-native-vector-icons

然后执行

sh copy-font.sh

此时,你看看static/目录下面,应该多出了一个iconfont.json了,这个文件后面有用。

5、创建react组件

这个才是你最终需要用到的东西,保存到文件中,假设你保存到文件 src/components/IconFont.js

import createIconSet from 'react-native-vector-icons/lib/create-icon-set';
import json from '../../static/iconfont.json';
const Icon = createIconSet(json, 'iconfont', 'iconfont.ttf');

// export {Icon};
// export default Icon;

export class IconFont extends Icon {
  static defaultProps = Object.assign({}, Icon.defaultProps, {
    size: 18,
  });
}

你也可以直接export default Icon,它本身也是component,接下来你就可以像react正常组件一样使用它。

import React, {Component} from 'react';
import {View} from 'react-native';
import {IconFont} from './IconFont.js'

export class Test extends Component {
    render() {
      return <View><IconFont name="someIcon" /></View>;
    }
}

更多用法请移步:github上的介绍,这边只是抛砖引玉

维护

用脚本维护就是舒服,如果你的字体有变更,那么重复第一步的下载,接着执行sh copy-font.sh,就完事了。

可以把执行命令放到npm start 中,这样对于自己和团队,都是无缝更新的。然后你就可以大胆的把iconfont.json放进.gitignore

说明

使用这套方案,字体图标原先的色彩会被覆盖,意思就是你的图标只能有单色。如果要用多色,你需要使用另一个插件(传送门),缺点就是一个图标需要提供一个svg文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值