让您的应用支持新式的 Emoji 符号吧!

Emoji 已无处不在,自发布以来 emoji 已成为我们语言中不可或缺的一部分,它生动有效的表达力带来了语言文字层面的变革。您可能不会想到,连银行应用、健身应用或外卖应用也都应该支持 emoji。Emoji 现在已经遍布短信等通讯应用,已经成为我们语言的一部分。如果您的应用包含文本视图,那么它应该支持 emoji,至于原因,且听我娓娓道来。🥳

遇到的问题 😖

如果您的应用没有对 emoji 进行相应的处理,较早版本的 Android 可能不知道如何去显示它们。在大多数情况下,只会显示一个空白方格,我们称之为 "豆腐"。在未正确处理 emoji 的应用中,在原本应该显示 emoji 的位置将会显示出一个 "豆腐块",这可能会给用户带来困惑。例如,如果用户在 TODO 应用的任务列表里,向 EditText 中添加一个 🐶 表情,此时用户看到 "豆腐" 出现在屏幕上而没有显示输入的 🐶 表情时,用户则会认为应用存在 bug。

为了使 emoji 更加有趣,在很多情况下,一个 emoji 是由其它多个 emoji 组成的。比如 💪🏾 是 💪 和 🟫 的组合。

如果您输入肌肉的表情,而应用显示了胳膊和颜色方块,那么就不仅会让用户感到困惑,同时对于不同肤色风格的表述也有失准确,从而降低了应用的用户体验。

随着语言的发展,emoji 也在不断进化。每年新的 emoji 会以 Unicode 的形式添加到新的 Android 发行版本中,但可惜的是,没有途径能够将新的 emoji 字体添加到 Android S 之前的版本。

解决方案

emoji2 库已经集成到了 AppCompat 1.4,这意味着您只需升级至 AppCompat 1.4 版本,便可在 API 19 及更高版本上显示流行的 emoji。AppCompat 中的所有 TextView 都默认支持,因为我们添加了自动配置,所以它可以配置自己来加载正确的 emoji 字体。如果需要,您可以在 XML 或者代码中为特定的 TextView 关闭该功能。

我们来看一下在 AppCompat 1.3 和 AppCompat 1.4 中 emoji 的显示有什么区别。

简单来说,图形化的 emoji 实际上只是显示在文本中的一个图片 🖼️ 。它通过 Unicode 码点来表示,如同字母 'e',但是 Unicode 规定: 当显示码点时,应显示 emoji 图片而非字母 'e'。这张图片仅是字体文件中的一个 png (更多内容请参阅我们 为 Android 打造的 emoji 字体)。通常您可能认为字体内容就是字母 'e' 的笔画定义,但实际上字体的功能非常强大,可以包含 bitmap、png、svg,甚至完整的程序——有人在字体中实现了一个 游戏 🤯。

当以 Unicode 添加新的 emoji 时,新的 emoji 需要将新的 字形 或者可打印字符添加到 emoji 字体中——然后更新相应的表,字体就知道通过哪个码点来显示这个字形。

当输入字符串到平台时,EmojiCompat.process 需要将它进行转换,使其包含 EmojiSpan,它会告诉 Android 系统不要将该部分作为字符串显示,EmojiSpan 知道如何显示 emoji。

EmojiCompat.process 会遍历字符串并且找到所有的 emoji,并为每个 emoji 添加 EmojiSpan。EmojiSpan 会告诉 Android 不要以字符串的形式显示,而是调用 draw 方法来显示。EmojiCompat.process 使用字典树来查找所有的子字符串来匹配一个已知的 emoji。

字典树是一种非常有趣的数据结构,它非常适合在字典中高效地查找单词 (或者 emoji)。EmojiCompat 会遍历字符串,针对字典树检查每个码点。一旦它在字典树中找到完整的 emoji,它会检查是否平台不清楚如何显示 emoji 并且添加 EmojiSpan。您可以理解为 EmojiCompat 就是使用字典在字符串中寻找 emoji,而对应字典内容的定义就是如何使用 EmojiSpan 来显示所需的 emoji。

现在我们知道了 EmojiCompat 如何获取 emoji,接下来我们聊聊如何显示字符串 "Hi"。

一个字符串就是一组码点,它们通过数字来表示字形,比如字母 'm' 或者数字 '1'。Emoji 同样有对应的码点——您可以在 Emojipedia 上找到它们,包括我们现在要显示的 挥手 emoji

最后,draw 函数会被调用,然后将字体文件中的 emoji 直接画出来,并且包含您想要的效果——您的字符串!🥳🥳🥳

最后

Emoji 不仅仅只是有趣,它已经成为我们语言中不可或缺的一部分。如果您准备为用户提供支持流行 emoji 的最佳体验,请使用 AppCompat 1.4。

继续前进,继续使用 emoji 啦~ 🥳 🦄

更多关于 emoji 的最新 Play 政策,请参阅。

欢迎您 点击这里 向我们提交反馈,或分享您喜欢的内容、发现的问题。您的反馈对我们非常重要,感谢您的支持!

优秀的个人博客,低调大师

微信关注我们

原文链接:https://my.oschina.net/androiddevs/blog/5376809

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。