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

2022-09-02 21:58:46

我在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可以自动将预定义的字符转换为表情符号图标。因此,我想将字符串中所有出现的表情符号图标替换为一些预定义的字符,并将结果放入表情符号TextView.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比较/约定。有人可以帮我吗,谢谢!


答案 1

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

Unicode 标准包括 722 个表情符号,只需在字段或 中输入 Unicode 字符,Android 的默认字体即可显示这些表情符号。EditTextTextView

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

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


答案 2

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

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

根源:在java或android中,以编程方式表示表情符号的字符串,您将获得\\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;
}    

推荐