2012-03-16 11 views
14

tengo algún problema con mostrar el icono emoji en Android TextViewvisualización del icono emoji/emoción en Android TextView

En primer lugar, me encontré con una lista de icono de emoji en Unicode en aquí: http://www.easyapns.com/category/just-for-fun

En segundo lugar, he encontrado cómo mostrar el icono de emoji aquí: https://github.com/sharakova/EmojiTextView/blob/master/src/jp/sharakova/android/emoji/EmojiTextView.java

El EmojiTextView.java puede convertir el carácter predefinido al icono de emoji automáticamente. Por lo tanto, quiero reemplazar todas las apariciones de icono de emoji en una cadena por un carácter predefinido, y poner el resultado en EmojiTextView.java El problema es que mi código no puede reconocer el icono de emoji en la cadena que contiene el icono de emoji.

Aquí es mi fragmento de código - Estoy tratando de encontrar si la entrada coincide con ninguna de Unicode icono emoji:

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

no soy bueno en comparación Unicode/convención. ¿Puede alguien ayudarme por favor, gracias?

+1

Si está planeando incrustar los gráficos emoji de iPhone en su aplicación, tenga en cuenta que esto es una violación de los derechos de autor. No me sorprendería si te salías con la tuya (el mercado de Android está lleno de aplicaciones que violan los derechos de autor), pero debes ser consciente de ello. – StilesCrisis

+0

Gracias por su asesoramiento. De todos modos, ¿sabes cómo comparar la cadena de entrada y la cadena [] ArrayEUnicodeString? –

+0

@mobileappBeginner ¿es capaz de mostrar \ ue415 en android? –

Respuesta

1

También podría tratar de encontrar el emoji utilizando una expresión regular: "[\ ue415 \ ue056 \ ue057]", en lugar de comparar los bytes.

4

Funciona bien si convierte la cadena a una matriz de caracteres y comprobar cada char, tales como:

StringBuilder sb = new StringBuilder(); 
for (char curr : str.toCharArray()) { 
    sb.append((SUPPORTED_EMOJI_SET.contains(curr)) ? convertCharToImgTag(curr) : curr); 
} 

donde SUPPORTED_EMOJI_SET es sólo un conjunto de caracteres, por ejemplo:

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

También podría hacer esto con una expresión regular, pero creo que lo anterior funcionaría más rápido.

+1

@esilver ¿podría guiarme cómo podría usar los iconos de emoji en mi aplicación de Android sin violar ningún derecho de autor? – ajay

5

¿Por qué quiere incrustar las imágenes de emoji de Apple protegidas en su aplicación?

El estándar Unicode incluye 722 emoji que se pueden mostrar con la fuente predeterminada de Android simplemente ingresando los caracteres Unicode en un campo EditText o TextView.

Usted puede, además, utilizar la siguiente biblioteca (en la carpeta "Java") para convertir automáticamente los emoticonos populares como :-) a la correspondiente emoji Unicode:

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

1

aquí, por favor pasar por debajo solución:

Problema: Dentro TextView en lugar de Emoji, cadena \ ue415 \ ue056 \ ue057 se showin gramo.

causa raíz: en Java o androide, mediante programación representación de cadena de Emoji del obtendrá como \\ ue415 \\ \\ ue056 ue057. Pero cuando intenta imprimir el mismo String en la consola o LogCat, se elimina el carácter de escape y obtendrá una cadena como \ ue015 \ ue056 \ ue057, debido a que la causa raíz de este problema no es detectable.

Solución: Para resolver este problema, necesitamos manejar el carácter de escape. He creado el siguiente método que resuelve este problema.

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; 
}