How to use icon fonts in your mobile apps

在任何APP设计中实现可图形的矢量缩放最完美的方式是使用字体图标.

移动端的设计变的越来越复杂。原因在于多样的屏幕尺寸与不同的分辨率。 Native版APP几乎无法提供像素级别完美的视觉体验。

当我们设计APP界面中各种图标时,我们不得不面临两方面,好的一面是,使用真实的icons,即使用像素设计出吸引用户的交互界面,这样的交互界面能更好的帮助用户理解和使用你的APP,不太好的一面就是繁琐乏味的“重复工作”。一旦你的杰作完成了,你得开始切片、组织、优化、适配等工作,在开发人员将你的视觉设计应用于不同设备中时,这些工作始终惯穿于每个项目。

基本上我非常爱用像素图标,但我最近发现我花太多时间在清理文件夹,寻找不同规格的目标设备。尽管市面上有众多的插件帮你从单个图片源导出成多种方案的图标与图形,追踪优化各种分辨率、操作系统下图片的优化是项可以避免的苦差事儿。让我们看一看基于矢量的图标字体(icon fonts)

利用Fontello网站的图标字体生成器,我们分分钟就可以生成一组图标

Friends with benefits (炮友?)


当在设计产品UI时,我们许多美工都尽量不使用像素图片,而更倾向于使用矢量图,是有各种原因的。举个粟子,在一个需要快速变更需求又要求保质的的团队中工作。保持文件大小的可维护,以及让UI能适应各种尺寸屏幕,这些都是矢量图形应用时的小功能。矢量图形能让你在一个长期的项目不会抓狂的渡过。

在面对自适应、加载时间或retina屏等问题时,基于矢量图形的解决方案已成为基本解决方案了,就像CSS效果,为不同用户设计高质量的WEB UI,由于近期浏览器在自定义字体上的较好的支持,很多美工甚至将它们的icons做成web fonts,这一样是基于矢量图形好处理由。
 
 
作为一名移动端的美工,花费了太多时间在切割、组织、打包图形上,我曾好奇是否可以在native的app上应用这项高级的web技术。
希望能够不再关注分辨率、设备尺寸,真正关注于设计本身的工作,我决心使用图标字体(icon fonts)来增强IOS和ANDROID APP的UI
 
 
在应用属性列表内加载项目文件夹内用户自定义字体
 
 
对于可缩放的自适应设计来讲,Icon fonts是一种惊人的解决方案。
在开发native app时,你应该记住icon fonts技术有多项超过位图的高级特性,这些特性所带来的好处会影响你的设计工作流,以及产品的最终品质。
 

可缩放性(Scalability):

基于字体的icon是与分辨率无关并能缩放到任何想要程度的技术。你的图标看起来毫不关心retina,HDPI,XHDPI等等屏幕,但渲染时会根据目标设备自动调整,你将有能力应对任何当下,未来,或大多数任意规格的设备
 

尺寸(Size ):

裁剪到正确的比例,icon font的文件的大小要比起位图小到难以置信的程度,使用icon font时,你不需要根据不同设备准备不同的图片,你的APP只需要在启动时加载一次icon font文件即可。
 
可维护性(Maintainability):
自你的icon打包进一个字体文件,在项目自始至终你仅需要维护这个单一的字体文件。
通过管理字体文件你可以很自然的组织你的icon集合,任意的进行修改或扩展 
可推广性(Adoption):
然而,应用这样的icon fonts可能会影响你和你同事之间的工作流程,但说服让他们采用这样的技术也非常简单,有数款免费或收费的工具帮你轻松达到目的并能看到很好的应用结果,在几乎任意(手机)移动平台、浏览器或操作系统
 
灵活性(Flexibility):
应用icon fonts技术中最有意义的一项能力是可以操纵icon fonts, 改变颜色,大小,仅仅几行代码就可以在瞬间改变外观
 
可交互性(Interactivity):
由于灵活性以及能够通过代码方便的操纵,icon fonts 是独一无二的在运行时被操纵,通过应用icon fonts技术, 你能轻松的在不同状态显示对应的不同效果,创建动画。
 
 

虽然icon fonts为设计提供了众多好处为一些有趣的设计提供可能性,自然地,它也不是全权的解决方案。一旦你的设计中需要的颜色超过一种,实现复杂的视觉设计,icon font就有限制了。无认如何,主流与非主流的icon fonts都能在互联网上找到,在我们使用之前web设计界已经很流行了,并有很多服务帮你创建梦幻的icon fonts集合
 
通过xcode中的outlet connection, 在view呈现后,你还能很方便的改变label
 
 
 
 

Using icon fonts on iOS

在IOS中使用字体图标


在IOS中应用icon font非常的简单粗爆。在一开始你最好通过使用Fontello或IcoMoon收集一些图标并整合进你的APP。另一种方法是你自己花时间自己做出来,但创造性的工作的总要花掉你很多时间。
那么现在我们仅仅需要将得到的icon整合进我们的APP
 
你只需要懂得IOS开发基本的文件结构以及.tff后缀的字体文件icon font
为了测试icon font技术,我们在Xcode内新建一个Single View Application的工程。工程建完后就把你的字体文件复制进工程目录,如果不出什么意外,你应该在你的Project Navigator中看到对应的字体文件了
 
为了让Xcode理解你将要如何使用导入的文件,你得在你的应用程序的Info.plist内建立“链接”。这个plist文件在Supporting Files文件夹内,表现为meta data即可理解为hash表。为了在编译app时能包含进你的字体文件,在list上简单新建一行(右键然后add row)名字选择为Fonts provided by application,在其下给字体文件取个名字,名字就是你的应用程序中用来识别你的字体文件的。在我们这个测试工程中,值为fontello.ttf。现在Xcode知道了我们导入的文件能干什么,我们能在程序中使用导入的字体文件了
 
 
把你的app切换到storyboard模式,在view中你喜欢的地方放一个label组件用来显示icon,在设置完label后,我们需要建立一个outlet。
在storyboard中做这些事情都很简单,在Assistant Editor Mode模式下
 
此模式下显示了你的图形界面和ViewController界面。现在简单的按住ctrl键,从label组件拖动就会现线条,直接拖线条到ViewController到@interface这行代码上放开就会弹出一个小界面,输入名称,比如 iconLabel,outlet就建成了,代码中你会发现多了下面这样一行:
@property (weak, nonatomic) IBOutlet UILabel *iconLabel

现在你就能通过代码来控制label组件了,通过编辑ViewController(.m后缀的文件)设置label。在viewDidload方法内加入以下几行代码,就像下面那样

( void)viewDidLoad{ 
  [super viewDidLoad];
  [iconLabel setFont:[UIFont fontWithName:@"fontello" size:]]; 
  [iconLabel setText:[NSString stringWithUTF8String:"\u2692"]];
}
添加的第一条代码用来定义字体应用于label并设置字号,这里我们设置了130pt
在使用这些命令时要注意字体名称,这里要填写字体的真实名称,即在字体簿打开的字体名或任何其它编辑器内能显示的字体名称。特别注意这点,因为字体名很可能与字体文件名称不一样
 
在第二行中文字用Unicode字符 Hammer and Pick (2692)编码。
 
虽然有点神秘,获取icon字体的unicode字符编码还是比较容易的。可以使用字体编辑器,或者直接上传到Icon Moon这类网站,你可以毫不费力的将icon字体转换成unicode编码
 
你可以通过Android XML 语法来申明任何你想要的UI属性
 
Colours, gradients and shadows
现在icon“引用”已经建立,你都搞定了。在我们通过代码操作label前,你得先运行看看你的工作成果。最终,这也是你将icon字体合并进app所要做的。从现在开始有趣的事儿才开始。文本的所有操作都由你掌控了,例如:颜色,透明度,渐变,阴影。
例如应用以下几行代码 ,让icon变成红色+阴影:
iconLabel.textColor = [UIColor redColor];
iconLabel.shadowColor = [UIColor blackColor];
iconLabel.shadowOffset = CGSizeMake(1.0f, 1.0f);

有许多效果可以使用。一些相对来说比较复杂,但所有文本效果都通用。动画或任何复杂的操作只要你能想到的都可以做了

Using icon fonts on Android

在Android中应用字体图标


同样的,在开发Android应用时也一样能使用icon fonts就像用在ios上面一样,能得到一样的好处。
就应用范围而言,Android更加有意思更有用。因为Android有着更多不同分辨率,不同屏幕的设备平台。最重要的是Android默认不支持矢量图形,这对开发者和设计人员面对不同Android设备时可是一个重大打击
 
在开始开发你的新Android应用之前,你仅需要知道一个app最基本的文件构架,同样的icon font文件也是.tff后缀,使用包含了Android ADT的Eclipse IDE,你可以开始新建一个Blank Activity的Android Application Project。在项目设置后,复杂.tff文件到你的资源文件目录内。一旦复制成功,Package Explorer面板内应该能看到
 
接下来,在你的Main Activity View内创建一个TextView。你可以在layout文件夹内找到你的资源文件。文件名应该是 activity_main.xml。在多数情况下,Android SDK已经将一个文本为“Hello world”的TextView放到了你的View内,我们就能使用这个TextView了。
在定义Icon各属性后,你能在模拟器内看到你的icon了。
 
为了操作TextView,我们需要将图形模式切换到切换到XML View内。现在为TextView添加一个ID,以便接下来UI和代码建立引用关系
你的TextView应该看起来像下面这样
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:id="@+id/iconLabel" />

通过使用ID,我们能够在APP内任何地方操作TextView。现在你可以切换到MainActivity.java文件添加一些代码来加载icon font了。在MainActivity内有一个方法名为onCreate的方法。加载和应用icon fonts都在此方法内,如下

TextView iconLabel = (TextView) findViewById(R.id.iconLabel); 
Typeface font = Typeface.createFromAsset(getAssets(), "fontello.ttf");
iconLabel.setTypeface(font); iconLabel.setText("\u2692");

和上面的IOS例子很像,通过引用到label组件,我们告诉Android应该使用哪个自定义字体到TextView上面。之后几行使用Unicode字符编码,这次以JAVA方式而已。运行程序后你就可以看到你的icon在Main Activity的View上了

在应用成功后,你可以根据你的需要操作icon了。Android UI构建通常由interface builder或组织XML文件来实现,要添加一些效果,只要回到Main Activity的XML部分找到添加了Label ID的地方,添加一些代码就可。例如添加以下代码会让你的icon变大,带点透明的红色,并伴有阴影。

android:id="@+id/iconLabel"
android:textSize="120dp"
android:textColor="#ccff0000"
android:shadowColor="#99000000"
android:shadowRadius="2" />

有很多的效果可以应用。就像在IOS中一样,动画或者复杂的操作都由你掌控了。最大的好处是自定义的icon fonts可以广泛的适配各类操作系统。任何支持自定义icon fonts的平台都允许你使用全新的这些效果

使用字体编辑器,你能优化现存的icons或解放你的思想让你创建出自己的杰作

Wrap up

总结一下


在开发native app时使用icon fonts有着难以置信的好。考虑到icon fonts的可缩放性,在你设计任何移动设备APP时,你几乎可以忽略屏幕大小及分辨率。最大的好处莫过于,在app中icon fonts的灵活性,在整个app运行过程中中都可以操作,支持实时效果和动画。此外由于icon fonts较容易的适配,在设计工作和主要管理工作中可以增强整体工作流程事半工倍,无论面对的是何种分辨率或屏幕密度。
 
 
 

译者的话


要应用字体图标,首要的条件还是要拥抱扁平化的设计
为什么要扁平化?
  • 让设计从技术实现上更简单
  • 苹果,谷歌,微软,都相继推出扁平化或类似的设计语言
  • 在手持设备或车载设备上,扁平化的大色块设计更容易识别与操作
  • HTML5实现扁平化的UI性能更好
  • 扁平化大色块的设计,使用PNG图片拥有更好的压缩比率,图片文件更小
 
 

 
 
 
 
 
========================================================
英文原文,可能需要翻qiang:
 

英文水平有限,凑合着翻,全当自我学习欢迎交流学习

转载处请注明:博客园(王二狗,池中物)willian12345@126.com

 
 

如何在移动端app中应用字体图标icon fonts的更多相关文章

  1. 如何在移动端app中应用字体图标icon fonts (转)

    原文: http://www.cnblogs.com/willian/p/4166757.html?utm_source=tuicool&utm_medium=referral How to ...

  2. AngularCli项目中添加字体图标(Font)详解

    本文主要讲如何在AngularCli生成的项目中使用字体图标. 一 SVG图标准备 将需要转换为字体图标的图片转换为SVG格式. 这个让项目视觉设计师搞定即可. 二 SVG图标转Font 可以通过Ic ...

  3. 如何在微信小程序中使用字体图标

    微信小程序中,在image标签里,可以在src中引用本地文件,但是background设置背景图或者使用字体图标的时候,却不能引用本地文件,只能用url地址的图片或字体,或者使用base64编码后的格 ...

  4. 字体图标Icon Font

    字体图标Icon Font 前段时间研究怎样做字体图标,在网上查找诸多资料,诸多尝试,找到一套可以自己制作自己独立控制的制作流程,公司按照这套流程形成一套自己公司图标,本人目前所在公司已经在使用没有发 ...

  5. 在WPF中使用字体图标

    一.源码描述    这是一款基于WPF窗体应用程序的字体图标示例源码,    该源码简单易懂使用于初学者和实战项目应用,    感兴趣的朋友们可以下载看看哦. 二.功能介绍    1.用ICO字体代替 ...

  6. vue之placeholder中引用字体图标

    先说一下问题:在placeholder中想使用字体图标,结果渲染不正确,代码如图 效果如图 在网上get到了解决方法: 在VUE组件中,给placeholder添加图标,需要注意以下几点: 1.不要给 ...

  7. 使用iconfont管理项目中的字体图标

    先来说说字体图标的好处: 很容易任意地缩放: 很容易地改变颜色: 很容易地产生阴影: 可以拥有透明效果: 一般来说,有先进的浏览器支持: 可以使用CSS来装饰(可以得到CSS很好支持): 可以快速转化 ...

  8. 初学者--bootstrap(六)组件中的字体图标----在路上(9)

    组件---字体图标 无数可复用的组件,包括字体图标.下拉菜单.导航.警告框.弹出框等更多功能. 1.如何使用:        出于性能的考虑,所有图标都需要一个基类和对应每个图标的类.把下面的代码放在 ...

  9. WPF中应用字体图标

    一.什么是字体图标 我们在进行GDI(图形界面)编程的过程中图标是不可少的.近些年随着网络的繁荣和移动应用的繁荣,矢量图的应用越来越火. 矢量图是一种用数学方法描述的.由一系列点和线组成的图,因此相比 ...

随机推荐

  1. ctf实验平台-成绩单

    题目链接:http://120.24.86.145:8002/chengjidan/ 平台地址:http://123.206.31.85/ 第一步:暴库 id=-1' union select 1,2 ...

  2. Delphi编程防止界面卡死的方法经验分享

    Delphi编程防止界面卡死的方法经验分享! 1.循环里面防止界面卡死的方法可以使用Application.ProcessMessages:  例如下列方法:    var      n: Integ ...

  3. HttpWebRequest 保存Cookies,模拟Session登录

    前面使用HttpWebRequest 对象可以抓取网页中一些资料,不过有些页面可以直接打开,而有些页面必登录之后才能打开,也就是在登录后保存登录信息在Session,这样就可以访问有权限的页面了.下面 ...

  4. C++解析(8):C++中的新成员

    0.目录 1.动态内存分配 1.1 C++中的动态内存分配 1.2 new关键字与malloc函数的区别 1.3 new关键字的初始化 2.命名空间 2.1 作用域与命名空间 2.2 命名空间的定义和 ...

  5. 洛谷P1352 没有上司的舞会——树形DP

    第一次自己写树形DP的题,发个博客纪念`- 题目来源:P1352 没有上司的舞会 题目描述 某大学有N个职员,编号为1~N.他们之间有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结 ...

  6. Probability|Given UVA - 11181(条件概率)

    题目大意:n个人去购物,要求只有r个人买东西.给你n个人每个人买东西的概率,然后要你求出这n个人中有r个人购物并且其中一个人是ni的概率pi. 类似于5个人中 抽出三个人  其中甲是这三个人中的一个的 ...

  7. Qt浅谈之总结(整理)

    Qt浅谈之总结(整理) 来源 http://blog.csdn.net/taiyang1987912/article/details/32713781 一.简介 QT的一些知识点总结,方便以后查阅. ...

  8. 【刷题】洛谷 P4716 【模板】最小树形图

    题目背景 这是一道模板题. 题目描述 给定包含 \(n\) 个结点, \(m\) 条有向边的一个图.试求一棵以结点 \(r\) 为根的最小树形图,并输出最小树形图每条边的权值之和,如果没有以 \(r\ ...

  9. 【BZOJ4943】【NOI2017】蚯蚓排队(哈希)

    [BZOJ4943][NOI2017]蚯蚓排队(哈希) 题面 BZOJ 洛谷 UOJ 题解 记得去年看网络同步赛的时候是一脸懵逼的. 昨天看到\(zsy\)做了,今天就看了看.. 这不是\(Hash\ ...

  10. 【HDU4652】Dice(数学期望,动态规划)

    [HDU4652]Dice(数学期望,动态规划) 题面 Vjudge 有一个\(m\)面骰子 询问,连续出现\(n\)个相同的时候停止的期望 连续出现\(n\)个不同的时候停止的期望 题解 考虑两种分 ...