2016-03-04 4 views
10

Ich möchte das Emoji-Symbol in meine Android-App integrieren. Deshalb sah ich den Hex-Code für das utf-8-Symbol und addierte die folgend meine string.xml Datei:Emoji-Symbol in string.xml stürzt App

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

Diese in Perfect führen soll. stattdessen meine App abstürzt Wenn jedoch die Anrufaktivität versucht dies anzuzeigen:

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

Nicht besonders perfekt;)

+0

Ich weiß nicht, das Format der 'string.xml' Datei aber Ihr Beispiel ist nicht gültig XML. Ihr '' Knoten enthält etwas Text und einen anderen XML Knoten (''). Just 'Perfect & # x1f44d; & # x1f44d;' als Wert könnte funktionieren. –

+0

Hallo bitte beziehen Sie sich auf diese "http://stackoverflow.com/questions/24852806/How-kann-ich-Put-UTF-16-Zeichen-in-android-string-Ressource". –

+1

@toom entschuldigung für den falschen link - hier ist der link http://stackoverflow.com/questions/33288225/how-can-i-put-a-ora-any-other-emoji-insidea-an-xml- String' –

Antwort

0

Es scheint, dass neuere Versionen von Android den Absturz nicht verursachen (API 24 funktionierte in meinen Tests), aber das hilft nicht, wenn Sie ältere Versionen unterstützen. Das Beste, was ich herausfinden konnte, ist die Verwendung von Java-codierten Strings.

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

Es gibt eine Reihe von Nachteilen mit dieser Methode, die im wesentlichen darauf, dass es nicht in den Layout-XML-Dateien zugegriffen werden kann. In einigen Situationen kann dies jedoch eine praktikable Lösung sein.

+0

Sie könnten Datenbindung verwenden, wenn Sie wirklich in der XML –

+0

benötigt @ cricket_007, habe ich nicht viel mit [Android Data Binding] getan (https://developer.android.com/topic/libraries/data-binding/index.html). Ich frage mich auch, ob [formatierte Strings] (https://stackoverflow.com/questions/3656371/dynamic-string-using-string-xml/40715374#40715374) funktionieren könnten. Wenn es für jemanden funktioniert, hinterlasse bitte einen Kommentar. – Suragch

2

Das Update für das heißt: Add "--utf16" aapt von

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

auf Ihre build.gradle Datei, und stellen Sie sicher, dass Sie nicht aapt2 verwenden.

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

+0

es funktioniert, danke –