React-Native使用自定义字体文件iconfont

作者: 尹_路人 | 来源:发表于2016-08-26 09:25 被阅读14475次

React-Native设置自定义字体文件

今天主要说说如何通过字体文件加载应用中的一些图标

首先推荐一个网站iconfont-阿里巴巴矢量图标库,这里有海量的图标,可以下载你想要的各种矢量图标,你也可以在注册并登陆账号后,把自己想要的图标打包、下载为文件

效果

  • 关于<Text>组件
    通过fontFamily可以指定<Text>显示的字体文件,下文将详细说明

  • 代码

      <View style={styles.container} >
          <Text style={styles.iconStyle}></Text>
          <Text style={styles.iconStyle}></Text>
          <Text style={styles.iconStyle}></Text>
          <Text style={styles.iconStyle}></Text>
          <Text style={styles.iconStyle}></Text>
      </View>
          
      //样式
      const styles = StyleSheet.create({
          container:{
              backgroundColor:'white',
              width:width-44,
              height: 36,
              marginTop: 2,
              flexDirection:'row',
              alignItems: 'center',
              justifyContent: 'space-around'
          },
          iconStyle: {
              color: 'red',
              fontFamily:'iconfont',
              fontSize: 30 
          }
      })
    
  • 效果图:

    用字体文件加载图标

解释

  • 阿里巴巴矢量图标库中选择适合的图标,并打包下载

  • 下载后得到如下文件,iconfont.tff即为所需文件

  • 在根工程目录下创建assets/fonts/文件夹,导入iconfont.ttf文件

1. iOS

  • iconfont.ttf文件拖到iOS工程目录下
  • 修改Info.plist

    在info.plist文件中添加key为 Fonts provided by application的Array中添加item iconfont.ttf,到此为止,已经可以在RN项目(iOS端)中使用对应fontFamily:iconfont中的字体图标了
    如下图所示:

2. Android

之所以在工程目录下创建assets/fonts这样的路径,就是为了iOS和Android统一,因为Android必须要把字体文件放在[project root]/android/app/src/main/assets/fonts/文件夹下才能生效,好吧,我们把工程目录下的assets拷贝一份(可以通过编写脚本自动执行)到Android/app/src/main目录下

3. 使用

<View style={styles.container} >
    <Text style={{fontFamily:'iconfont'}}></Text>
    <Text style={{fontFamily:'iconfont'}}></Text>
    <Text style={{fontFamily:'iconfont'}}></Text>
    <Text style={{fontFamily:'iconfont'}}></Text>
    <Text style={{fontFamily:'iconfont'}}></Text>
</View>

效果就是文章开篇的效果图了

4. 弊端

图标对应的是unicode码,不够直观, (如:"", "")跟显示的图标没有直接的对应关系

更新

最近注意到有评论反映在iOS端运行报错

 Unrecognized font family 'iconfont'

通过跟@_MinYa_的沟通,发现了一种导致上述问题的可能性

阿里巴巴矢量图标库中新建项目的时候注意FontClass/Symbol前缀Font Family
默认值是iconiconfont
如果这里有自定义的情况的话,在代码中引用的时候fontFamily:'自定义FontFamily'

鉴于上述问题,强烈建议创建字体文件项目的时候使用默认名称

相关文章

网友评论

  • 4f9f8b21fc30:请问 <Text style={{fontFamily:'iconfont'}}></Text>这里的iconfont是哪来的???你就这么含糊其词的写完了,留下我一脸懵逼,我还被迫注册了账号
  • f65005e0f8bd:运行 iOS报错,Unrecognized font family 'iconfont,但是我没有改过font-family名称
    ed8623b397d2:解决了吗???
    木易宗龙:请问解决了吗,没修改过font-family名称,ios相关配置也加上去了,今天出了这个问题?之前以同样的方法集成了几个项目都没问题
  • 代码界的扫地僧:楼主我的都好用 但是名字和图标对应不上。。。。
  • Aal_izz_well:为什么安卓跟iOS写法不一样呢?不是对同一个文件进行编辑吗?iOS用了iconStyle,而安卓写style={{fontFamily:'iconfont'} ?
    Aal_izz_well:@尹_路人 我的意思安卓那块也应该是:
    <View style={styles.container} >
    <Text style={styles.iconStyle}></Text>
    <Text style={styles.iconStyle}></Text>
    </View>
    iconStyle: {
    color: 'red',
    fontFamily:'iconfont',
    fontSize: 30
    }
    而不是:
    <View style={styles.container} >
    <Text style={{fontFamily:'iconfont'}}></Text>
    <Text style={{fontFamily:'iconfont'}}></Text>
    </View>
    我第一眼看见以为安卓的不支持iconStyle: {
    color: 'red',
    fontFamily:'iconfont',
    fontSize: 30
    }这么写;我试了一下,可以这么写。我刚开始学RN,不好意思;:grin:
    尹_路人::sweat: 可能你对style不熟吧
    是styles.iconStyle,

    //样式
    const styles = StyleSheet.create({
    iconStyle: {
    color: 'red',
    fontFamily:'iconfont',
    fontSize: 30
    }
    }
  • 代码界的扫地僧:楼主 我的info.plist 为啥会没有Fonts provided 这个。。。。尴尬
    代码界的扫地僧:@尹_路人 谢谢 搞定了
    尹_路人:"在info.plist文件中【添加】key为 Fonts provided by application......"

    没有的话自己手动添加,文中相关图片做了更新,你看一下
  • 9f450105ff7b:空白不显示,也不报错
    尹_路人:@筑梦先生 目前好像只支持纯色,一个图标多种颜色的话还是让UI同学切图吧
    9f450105ff7b:要重新run-android一下, 而且Unicode的话不支持彩色图标的
  • 1ecee6333772:安卓 直接 写 Unicode 可以显示,用{js变量}就不行
  • 1ecee6333772:安卓 直接 写 Unicode 可以显示,用{js变量}就不行
  • 37180fa1fbe9:同下面评论,只有安卓可以运行,IOS各种都不行,所有步骤都试过
    37180fa1fbe9:已经解决,是iconfont项目的设置,项目初始化时更改过font-family的名称,导致IOS不能识别
  • 切斯特你在哪:用XCode跑项目没问题...用webstorm命令行跑项目, ios同样报了 iconfont 不识别的错.请问博主知道什么原因吗
    魏祥明:@尹_路人 我和他一样的问题,用Xcode运行就正常
    魏祥明:请你你的问题解决了嘛? 我的问题和你一样
    尹_路人:在苹果的模拟器上运行正常么?

  • ggx900706:我也不行。。不知道怎么回事。android运行没问题,ios运行不了。plink文件写了item0。各种试都不行
  • taiji1985:调出来了。很好!很强大!
  • taiji1985:正是我想找的,试试。。。。。
  • e73efb5571a8:为啥我ANDROID有效IOS 无效 :sweat:
  • 左边飞来一只狗:React Native 是混编开发对吗?
  • e0b1e2f67571:楼主,我遇到这种问题

    var txt = '®';
    return <Text>{txt}</Text>

    如果把字符变成变量的话,在视图里面,就直接显示字符串了,而不是图标
    37483b0cc263:哪有什么办法可以动态输出呢~
    e0b1e2f67571:现在就是想设置一个模板,通过输出不同的字符,来显示不同的图标,然而通过变量的方式,会被解析成字符串,直接<Text>*****</Text>这样是可以显示的
    尹_路人:@e0b1e2f67571 你加了花括号{ } 它会被识别为普通字符串,所以不能设置中间变量,直接<Text>****</Text>
  • 搬砖狂魔:楼主我在ios 遇到一个问题就是 从阿里字体图标库 导出了两个字体文件 1.ttf 2.ttf 其他配置都对 但是后导入的 字体文件会报Unrecognized font family android 下没问题
    尹_路人:@搬砖狂魔 我刚才看了一下,如果plist文件设置不对会有Unrecognized font family '***' 的提示,再检查一下你的plist文件

    确保 Fonts provided by application 的Array中有 fonts/1.ttf 和 fonts/2.ttf

    你的错误提示也没写全
    搬砖狂魔:@尹_路人 都有添加
    尹_路人:@搬砖狂魔 不知道你的Info.plist文件有没有根据文章中的要求修改
  • 08a80639d366:ios出现 ‘’Unrecognized font family 'iconfont'... 这个是哪里没弄好。。
    0fd1944c9ef1:@茫忙 您是怎么解决的?我这边也是这个问题。。。 :sob:
    08a80639d366:@尹_路人 我这里的原因找到了是: ios的ttf文件是可以设置字体名字的,并不是用ttf的文件名字. android的话直接用ttf文件的名字是可以的.. 所以会出现这种问题...
    尹_路人:@茫忙 我这里没有出现这种问题,你看一下导入Xcode的fonts文件夹有没有问题
  • 请输入其他名字:你好,我在android上试了一下不会报错,但没有正确显示,显示成一个矩形中有一个叉号的样子
    尹_路人:@Zhan丨友 :clap: :clap:
    请输入其他名字:@尹_路人 您好,已经解决了,谢谢啦!:smile:
    尹_路人:@Zhan丨友 重新下载字体文件试试 安卓的需要确认一下字体文件夹的位置
  • 木易宗龙:博主,我会报无法识别iconfont字体,我已经导入了也设置了
    尹_路人:@木易宗龙 iOS 还是 Android?
  • aqnaruto:那么,怎么同时有图标又有字呢?
  • 302c42b68461:不错
    尹_路人:@一古陵逝烟一 谢谢:blush::blush:
  • f87fb4abd6bd:不错哦
    尹_路人:@爱上键鼠 谢谢

本文标题:React-Native使用自定义字体文件iconfont

本文链接:https://www.haomeiwen.com/subject/vbcasttx.html