史上最简单的Emoji显示

研读了一下kymjs的EmojiChat,重点看了一下emoji显示部分,发现一个very good的地方,textview与edittext用ttf去加载emoji。
之前在写聊天对话框的时候,参考了emojicon,各种自定义textview之类的。简单说明一下原理,之所以默认文本框不能显示emoji,是因为默认字体库中没有对应的unicode编码。在文本框中显示的时候,这部分没有对应的值,就空在那边,仅仅占据几个byte位置。现在我把ttf加进去了,能不显示才怪呢。
简单的代码说明一下:在assets下面建立一个fonts文件夹,里面放入emoji.ttf,然后就剩下加载了

Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/emoji.ttf");
chat_edittext.setTypeface(typeface);
chat_textview.setTypeface(typeface);

如果要实现viewPager中的滑动,那么也仅仅需要gridview中放入相应的textview而已。

有个地方要注意一下,kymjs的EmojiChat里面有个DisplayRules类,里面用枚举对初始化表情进行管理

KJEMOJI0(0xF0, 0x9F, 0x98, 0x81)

再看下rockerhieu的emojicon,里面都是诸如

Emojicon.fromCodePoint(0x1f436)

这样的初始化,这两者之间的关系是什么?我们举个例子,一般的emoji都是4位的长度,好像这样“\u0030\u20e3”

value = new byte[]{this.value1, this.value2, this.value3, this.value4}

得到4个长度的byte数组之后,直接new String(byte)之后,就能得到这个unicode值了。

emojiIcon里面,直接通过作者提供的方法

public static final String newString(int codePoint) {
    if (Character.charCount(codePoint) == 1) {
        return String.valueOf(codePoint);
    } else {
        return new String(Character.toChars(codePoint));
    }
}

也能得到这个unicode

这个库唯一不好的地方在于,不方便自定义图标为emoji,除非手动改ttf

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值