Android 显示原生Emoji

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zgcqflqinhao/article/details/79298805

灵感来源于:http://blog.csdn.net/Alpha58/article/details/53449013


1 前言

现在人们在聊天中越来越喜欢发表情了,文字毕竟比较生硬,有时候一个合适的表情,能更准确地传递我们想要表达的意思。除了一些火热的表情包之外,emoji 也是备受喜爱,这些表情或搞怪、或呆萌,比起之前的 QQ 表情包可以说有过之而无不及。它们都能让别人一眼就看出你现在的情绪,相对于打一大堆文字,一个表情就能搞定,省事多了。
但是 emoji 到底是个什么东西呢,我以前傻傻以为它跟 QQ 表情一样,是一些图片,手机系统内置了这些图片,但是最近才发现,可不是这么简单啊。
emoji,绘文字,绘就是指图画,文字指的就是字符,就是把字符用图画的形式表现出来,最早是由日本人栗田穰崇创作,并在日本网络及手机用户中流行,自从 iPhone 在 iOS 5 的输入法中加入了 emoji 表情后,这股浪潮才开始席卷全球,目前已普遍应用于各手机短信及社交网络中。

说到底,emoji 其实就是字符,在Unicode位于 \u1F601-\u1F64F 之间的字符。这个显然超过了目前常用的UTF-8字符集的编码范围 \u0000-\uFFFF,所以我们肯定不能直接使用 emoji 的 unicode 编码,所以我们需要对其进行转换。


2 显示 emoji

首先让我们来看一个 emoji(这个网站https://apps.timwhitlock.info/emoji/tables/unicode可以获取大部分 emoji 表情符号):



这里可以看到 emoji 表情在不同平台的不同显示,是的,不同平台对同一个 emoji 的渲染方式可能不同。上图中有一个unicode,但是我们刚才说了,这个 unicode 不能直接用,别急,点击这个 unicode,你会看到:



这其中有一栏 Surrogates,这个我们就可以直接用了。

随便写个 TextView:

    <TextView
        android:id="@+id/tv_test"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="\uD83D\uDE01"
        android:textSize="30sp" />


运行起来可以看到:



什么?太麻烦了?不想每一个 emoji 都点进去查看 Surrogates ?好吧,那我们来想想能不能直接使用 unicode。U+1F601,去掉 U+ 的 1F601 其实就是个 16 进制的数,换算成 10 进制就是 128513,我们可以把这个 10 进制的数转成 String:

((TextView) findViewById(R.id.tv_test)).setText(new String(Character.toChars(128513)));

这样效果也是一样的。


3 抓取 emoji

我们知道怎么显示 emoji 了,但是我们在使用的时候总不能一个一个去写吧,最好是把所有 emoji 存在一个文件里,然后显示在列表中,使用 python 中的 BeautifulSoup 库可以很轻松地从上面那个网站抓取下来每个 emoji 的 unicode 和 description,我对其处理了一下,去掉了两个 unicode 的 emoji,这种类型的显示比较麻烦一点,而且也不常用,然后去掉了 “U+”,把 16 进制的数转成了 10 进制。最后的 json 文件类似这样:



总共 800 多个,相信应付一般的需求是没问题的了,美中不足的是这些描述都是老外写的,没有像什么“xk”(笑哭)、“wy”(无语)这样让我们容易理解的简称,如果我们需要发送的话,这些代号只能自己手写了。

列表效果演示:



4 总结

可以看到 Android 与 iOS 的显示是不一样的,就算同为 Android,不同手机也可能显示不一样,测试了一个三星手机,一个 metal 和一个 nexus,三个都不一样。。。其中 nexus 是 Google 原生的,metal 却是跟 iOS 一样,这个仁者见仁智者见智吧,有人喜欢统一,也有人觉得不用千篇一律的非得一样,保持各自特点比较好。使用字符的话当然比使用图片要省时省体积得多,这次的摸索其实还顺带练手了爬取数据的能力,例子太简单就不放代码了,这里面最有价值的应该是有 emoji unicode 码的 Json 文件,大家如果有需要的话可以在下面的链接中下载。


5 Github 传送门

最有价值的 Json 文件在 Demo 的 assert 文件夹中



猜你喜欢

转载自blog.csdn.net/zgcqflqinhao/article/details/79298805