【问题标题】:Display emoji/emotion icon in Android TextView在 Android TextView 中显示表情符号/情感图标
【发布时间】:2012-04-02 04:34:49
【问题描述】:

我在 Android TextView 中显示 emoji 图标时遇到了一些问题

首先,我在这里找到了 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 可以自动将预定义字符转换为表情符号图标。因此,我想将字符串中所有出现的表情符号图标替换为某个预定义的字符,并将结果放入 EmojiTextView.java 问题是我的代码无法识别包含表情符号图标的字符串中的表情符号图标。

这是我的代码 sn-p - 我正在尝试查找输入是否与表情符号图标的任何 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 比较/约定。谁能帮帮我,谢谢!

【问题讨论】:

  • 如果您打算在您的应用程序中嵌入 iPhone 表情符号图形,请注意这违反了版权。如果你侥幸逃脱,我不会感到惊讶(Android 市场上到处都是侵犯版权的应用程序),但你应该意识到这一点。
  • 感谢您的建议。无论如何,你知道如何比较输入 String 和 String[] ArrayEUnicodeString 吗?
  • @mobileappBeginner 你能在 android 中显示 \ue415 吗?
  • 否,Android 无法显示 \ue415
  • 嗨。我也想将表情符号从安卓转移到安卓和我的手机。你成功使用 xmpp 传输表情了吗?您如何实现发送和接收。我的意思是你如何检测文本之间有表情符号的文本?我正在为 android 使用 smack api。我需要在android中实现:)还是unicode?请让我知道实施情况。@mobile app Beginner

标签: java android unicode textview emoji


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果将字符串转换为char数组并检查每个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');
        ...
    }}
    

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

    【讨论】:

    • @esilver 你能指导我如何在我的安卓应用程序中使用表情符号图标而不侵犯任何版权。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • Unicode 字符集是一个标准,所有公司都会按照他们想要的方式绘制每个 Unicode 字符。相同的笑脸在所有设备上看起来会有所不同,在所有设备除了 Apple上看起来都不一样。我在使用 Android Studio 和 Emoji 时仍然遇到的问题是我必须执行多行代码才能包含“?”。我试过:textView.text = "?",但没有用。 Yeeeeesh,这有多难?
    【解决方案4】:

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

    问题: 在 TextView 而不是 Emoji 中,字符串 \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;
    }    
    

    【讨论】:

    • 简单而出色的答案。
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2011-03-21
    • 2016-04-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-28
    • 2018-09-06
    • 2018-09-05
    相关资源
    最近更新 更多