Отобразить эмодзи / значок эмоции в Android TextView - PullRequest
14 голосов
/ 16 марта 2012

У меня возникла проблема с отображением значка смайликов в Android TextView

Во-первых, я нашел список значков смайликов в юникоде здесь: http://www.easyapns.com/category/just-for-fun

Во-вторых, я нашел способ отображенияЗначок Emoji здесь: https://github.com/sharakova/EmojiTextView/blob/master/src/jp/sharakova/android/emoji/EmojiTextView.java

EmojiTextView.java может автоматически преобразовать предопределенный символ в значок Emoji.Поэтому я хочу заменить все вхождения значка эмодзи в строке каким-либо предопределенным символом и поместить результат в EmojiTextView.java. Проблема в том, что мой код не может распознать значок эмодзи в строке, содержащей значок эмодзи.

Вот мой фрагмент кода - я пытаюсь найти, совпадает ли ввод с любым юникодом значка эмодзи:

// 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"

Я не очень хорош в сравнении / соглашении с юникодом.Может кто-нибудь помочь мне, пожалуйста, спасибо!

Ответы [ 4 ]

5 голосов
/ 19 марта 2014

Почему вы вообще хотите встроить защищенные изображения Apple Emoji в ваше приложение?

Стандарт Unicode включает 722 эмодзи, которые могут отображаться шрифтом Android по умолчанию, просто введя символы Unicode в поле EditText или TextView.

Кроме того, вы можете использовать следующую библиотеку (в папке "Java") для автоматического преобразования популярных смайликов, таких как :-), в соответствующие эмодзи Unicode:

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

4 голосов
/ 03 июля 2012

Работает нормально, если вы преобразуете строку в массив символов и проверяете каждый символ, например:

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 голосов
/ 27 августа 2017

Здесь, пожалуйста, пройдите приведенное ниже решение:

Проблема: Внутри TextView вместо Emoji отображается строка \ ue415 \ ue056 \ ue057 .

Основная причина: В Java или Android программно строковое представление Emoji вы получите как \\ ue415 \\ ue056 \\ ue057 . Но когда вы пытаетесь напечатать ту же строку в консоли или LogCat, escape-символ удаляется, и вы получите строку как \ ue415 \ ue056 \ ue057 , из-за которой первопричину этой проблемы невозможно обнаружить.

Решение: Чтобы решить эту проблему, нам нужно обработать escape-символ. Ниже я создал метод, который решает эту проблему.

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;
}    
1 голос
/ 01 июля 2012

Вы также можете попытаться найти смайлики, используя регулярное выражение: «[\ ue415 \ ue056 \ ue057]» вместо сравнения байтов. ?

...