使用带有EmojiCompat支持库的strings.xml中的表情符号

时间:2017-09-20 08:53:55

标签: android emoji

我正在使用EmojiCompat支持库在我的应用中添加表情符号,我希望将这些表情符号直接放在strings.xml文件中(例如:<string name="string_name">Some text \uD83E\uDD96</string>

这适用于设备API&gt; 23,但否则会崩溃

A/art: art/runtime/check_jni.cc:65] JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xf0
A/art: art/runtime/check_jni.cc:65]     string: 'Some text '
A/art: art/runtime/check_jni.cc:65]     in call to NewStringUTF
A/art: art/runtime/check_jni.cc:65]     from java.lang.String android.content.res.StringBlock.nativeGetString(long, int)

我找到的唯一解决方案是在java变量中获取表情符号代码并将其放在我的字符串末尾(如google sample),并且它适用于所支持的每个版本。

但我真的想把表情符号代码放在字符串文件中,并且能够做到这样的事情:

emojiTextView.setText(getText(R.string.string_name));

有谁知道如何实现这个目标?

3 个答案:

答案 0 :(得分:1)

回答这个问题有点晚了,但仍然可以帮助您或其他人。

使用decimal值表情符号在strings.xml中添加表情符号。这也可以与支持库一起很好地工作。

在您要显示的情况下,它是T-REX(选中here),其十进制值为&#129430;。最终字符串为:

<string name="emoji">Some text &#129430;</string>

输出:

enter image description here

答案 1 :(得分:0)

我在我的应用程序中遇到了同样的问题,我没有资格说这可以限制你在android中使用emojis的程度,但我可以肯定地说你不能将emojis添加到android xml文件中(没有让你的应用程序崩溃,就是这样)。

但是,你可以做一点点破解来实现这个目标。 使用This java static list of all emojis。在这里你需要给表情符号名称(emojiID),如“DOG_FACE”或“HONEY_BEE”。

在您的strings.xml文件中添加这些表情符号,但是使用以下标记形式: “## DOG_FACE ##”或“## HONEY_BEE ##”(例如:“嗨!你好我的男人## DOG_FACE ##”)。

并创建一个方法,该方法将字符串的资源id作为参数并返回包含表情符号的字符串。此方法将查找正则表达式模式^##.*##$。您可以将方法命名为: -

emojiTextView.setText(getTextWithEmojis(R.string.string_name));

答案 2 :(得分:0)

警告:此次崩溃API 21

这不是表情符号,但您可以从此网站复制粘贴字符

http://www.fileformat.info/info/unicode/char/search.htm?q=earth&preview=entity

以示例:

对我有用的是使用“ Java数据”表中的值,特别是行“ string.toUpperCase()