2012-03-16 10 views
14

ho qualche problema con la visualizzazione di icona emoji in Android TextViewVisualizza icona emoji/emozione in Android TextView

In primo luogo, ho trovato un elenco di icona emoji in unicode a qui: http://www.easyapns.com/category/just-for-fun

In secondo luogo, ho trovato come visualizzare l'icona emoji a qui: https://github.com/sharakova/EmojiTextView/blob/master/src/jp/sharakova/android/emoji/EmojiTextView.java

L'EmojiTextView.java può convertire il carattere predefinito a icona emoji automaticamente. Pertanto, voglio sostituire tutte le occorrenze dell'icona emoji in una stringa con un carattere predefinito e inserire il risultato in EmojiTextView.java Il problema è che il mio codice non è in grado di riconoscere l'icona emoji nella stringa che contiene l'icona emoji.

Ecco il mio frammento di codice - sto cercando di trovare se l'ingresso corrisponde a nessuno Unicode di icona 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" 

Io non sono bravo a unicode confronto/convenzione. Qualcuno può aiutarmi per favore, grazie!

+1

Se si prevede di incorporare la grafica emoji dell'iPhone nella propria app, tenere presente che si tratta di una violazione del copyright. Non mi sorprenderebbe se te ne fossi portato via (il marketplace Android è pieno di app che violano il copyright), ma dovresti esserne consapevole. – StilesCrisis

+0

Grazie per il consiglio. Ad ogni modo, sai come confrontare l'input String e String [] ArrayEUnicodeString? –

+0

@mobileappBeginner sei in grado di mostrare \ ue415 in Android? –

risposta

1

Si potrebbe anche provare a trovare l'emoji utilizzando un'espressione regolare: "[\ ue415 \ ue056 \ ue057]", invece di confrontare i byte.

4

Funziona bene se si converte la stringa in un array di caratteri e controllare ogni char, come ad esempio:

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

dove SUPPORTED_EMOJI_SET è solo un insieme di caratteri, ad esempio:

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

Potresti farlo anche con un'espressione regolare, ma credo che quanto sopra sarebbe più veloce.

+1

@esilver potresti dirmi come posso usare le icone emoji nella mia app per Android senza violazione di copyright. – ajay

5

Perché vuoi incorporare le immagini emoji di Apple protette nella tua applicazione?

Lo standard Unicode include 722 emoji che possono essere visualizzate dal carattere predefinito di Android immettendo i caratteri Unicode in un campo EditText o TextView.

È possibile, inoltre, utilizzare la seguente libreria (nella cartella "Java") per convertire automaticamente le emoticon popolari come :-) alla corrispondente emoji Unicode:

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

1

Qui, prega di passare attraverso di seguito soluzione:

Problema: All'interno TextView invece di Emoji, String \ ue415 \ ue056 \ ue057 è showin g.

Causa principale: in Java o Android, programmazione rappresentazione di stringa di Emoji vi otterrà come \\ ue415 \\ ue056 \\ ue057. Ma quando si tenta di stampare la stessa stringa in console o LogCat, il carattere di escape viene rimosso e si otterrà una stringa come \ ue415 \ ue056 \ ue057 a causa della quale la causa principale di questo problema non è rilevabile.

Soluzione: Per risolvere questo problema, è necessario gestire il carattere di escape. Ho creato sotto il metodo che risolve questo 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; 
}