2016-03-04 25 views
10

Mi piacerebbe integrare il simbolo emoji nella mia app Android. Perciò ho guardato il codice esadecimale per il simbolo utf-8 e ha aggiunto il seguente al mio file string.xml:Simbolo Emoji in string.xml si blocca app

<string name="thumbsup">Perfect <node>&#x1f44d;&#x1f44d;</node></string> 

Questo dovrebbe risultare in Perfect. Tuttavia, invece i miei arresti app quando l'attività di chiamata cerca di visualizzare questa:

JNI DETECTED ERROR IN APPLICATION: input is not valid Modified UTF-8: illegal start byte 0xf0 

Non particolarmente perfetto;)

+0

non so il formato del file 'string.xml' ma il tuo esempio non è XML valido. Il tuo nodo '' contiene del testo e un altro nodo XML (''). Solo 'Perfect & # x1f44d; & # x1f44d;' come potrebbe funzionare il valore. –

+0

Ciao per favore riferisci questo 'http: // stackoverflow.com/questions/24852806/how-can-i-put-utf-16-characters-in-android-string-resource'. –

+1

@toom scusa per il link sbagliato - ecco il link 'http://stackoverflow.com/questions/33288225/how-can-i-put-a-ora-any-other-emoji-insidea-an-xml- string' –

risposta

0

Sembra che le versioni più recenti di Android non causino il crash (l'API 24 ha funzionato nei miei test), ma questo non aiuta se si supportano versioni precedenti. Il meglio che sono stato in grado di capire è usare stringhe codificate Java.

public class AppEmojiStrings { 

    // This is only a workaround for emoji causing crashes in XML strings. 
    // Use the standard strings.xml for all other strings. 

    public static final String thumbsUp = "Thumbs up "; 
    public static final String iLoveNY = "I \uD83D\uDC99 NY"; 
} 

ci sono un certo numero di svantaggi con questo metodo, il principale dei quali è che non è possibile accedervi nei file di layout XML. Ma potrebbe essere una valida soluzione per alcune situazioni.

+0

Potresti riuscire a utilizzare l'associazione dati se davvero ne hai avuto bisogno nell'XML –

+0

@ cricket_007, non ho fatto molto con [Android Data Binding] (https://developer.android.com/topic/libraries/data-binding/index.html). Mi chiedo anche se [stringhe formattate] (https://stackoverflow.com/questions/3656371/dynamic-string-using-string-xml/40715374#40715374) potrebbero funzionare. Se funziona per chiunque, per favore lascia un commento. – Suragch

2

La correzione di ciò è: Add "--utf16" per aapt aggiungendo

android { 
    aaptOptions { 
     additionalParameters '--utf16' 
    } 
} 

al file build.gradle, e assicurarsi che non si utilizza aapt2.

Vedi https://issuetracker.google.com/issues/37140916

+0

funziona, grazie –