在Android TextView中显示表情符号/情感图标

时间:2012-03-16 15:59:22

标签: java android unicode textview emoji

我在Android TextView中显示表情符号图标有一些问题

首先,我在这里找到了unicode中的表情符号图标列表: http://www.easyapns.com/category/just-for-fun

其次,我在这里找到了如何显示表情符号图标: https://github.com/sharakova/EmojiTextView/blob/master/src/jp/sharakova/android/emoji/EmojiTextView.java

EmojiTextView.java可以自动将预定义字符转换为表情符号图标。因此,我想将String中所有出现的表情符号图标替换为某个预定义字符,并将结果放入EmojiTextView.java 问题是我的代码无法识别包含表情符号图标的字符串中的表情符号图标。

这是我的代码片段 - 我正在尝试查找输入是否与表情符号的任何unicode图标匹配:

// Array list of all emoji icon
private static final String[] ArrayEUnicodeString ={
    "\uE415",
    "\uE056",
    "\uE057",
    ...
}

// Nothing matched when it receive emoji icon with unicode "\uE415" from iphone. 'input' is message received from XMPP server
for (int i=0; i < emojiLength; i++)
{

    if (input.getBytes() == ArrayEUnicodeString[i].getBytes())
        Log.e("test", "ArrayEUnicodeString found");
}
// Note: iphone can display the emoji icon if I send "\uE415"

我不擅长unicode比较/约定。请有人帮帮我,谢谢!

4 个答案:

答案 0 :(得分:5)

为什么要将受保护的Apple表情符号图像嵌入到您的应用程序中?

Unicode标准包含722表情符号,只需将Unicode字符输入EditText字段或TextView即可通过Android默认字体显示。

此外,您还可以使用以下库(在文件夹&#34; Java&#34;中)自动将流行的表情符号(如:-))转换为相应的Unicode表情符号:

https://github.com/delight-im/Emoji

答案 1 :(得分:4)

如果将字符串转换为char数组并检查每个字符,例如:

,它可以正常工作
StringBuilder sb = new StringBuilder();
for (char curr : str.toCharArray()) {
    sb.append((SUPPORTED_EMOJI_SET.contains(curr)) ? convertCharToImgTag(curr) : curr);
}

其中SUPPORTED_EMOJI_SET只是一组字符,例如:

new HashSet<Character>() {{
    add('\ue415');
    add('\ue056');
    ...
}}

您也可以使用正则表达式执行此操作,但我相信上述操作会更快。

答案 2 :(得分:2)

在这里,请通过以下解决方案:

问题:在TextView内部而不是表情符号中,显示字符串 \ ue415 \ ue056 \ ue057

根本原因:在java或android中,以编程方式表示Emoji的字符串表示,您将获得 \\ ue415 \\ ue056 \\ ue057 。但是当您尝试在控制台或LogCat中打印相同的字符串时,将删除转义字符,并且您将获得字符串 \ ue415 \ ue056 \ ue057 ,因为无法检测到此问题的根本原因。

解决方案:要解决此问题,我们需要处理转义字符。我创建了以下方法来解决这个问题。

public static String getEmojiFromString(String emojiString) {

    if (!emojiString.contains("\\u")) {

        return emojiString;
    }
    String emojiEncodedString = "";

    int position = emojiString.indexOf("\\u");

    while (position != -1) {

        if (position != 0) {
            emojiEncodedString += emojiString.substring(0, position);
        }

        String token = emojiString.substring(position + 2, position + 6);
        emojiString = emojiString.substring(position + 6);
        emojiEncodedString += (char) Integer.parseInt(token, 16);
        position = emojiString.indexOf("\\u");
    }
    emojiEncodedString += emojiString;

    return emojiEncodedString;
}    

答案 3 :(得分:1)

你也可以尝试使用正则表达式找到表情符号:“[\ ue415 \ ue056 \ ue057]”,而不是比较字节。