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运行就正常
        魏祥明:请你你的问题解决了嘛? 我的问题和你一样
        尹_路人:在苹果的模拟器上运行正常么?

      • 743ecdeca9af:我也不行。。不知道怎么回事。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:
      • 爱上键鼠:不错哦
        尹_路人:@爱上键鼠 谢谢

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

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