关于android:让您的应用支持新式的-Emoji-符号吧

46次阅读

共计 1950 个字符,预计需要花费 5 分钟才能阅读完成。

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 政策,请参阅。

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

正文完
 0