2014-07-20 10 views
11

Chcę używać emotikonów w ciągach mojej aplikacji. Wszystkie ciągi zawierają oczywiście ciągi znaków.xmlJak umieścić znaki UTF-16 w zasobie tekstowym systemu Android?

Problem polega na tym, że nie wszystkie emoji są 16-bitowe. Niektóre emotikony mogą być reprezentowane jako "normalne" 16-bitowe szesnastkowo: '\ u26FF', ale niektóre z nich to 32-bitowe heksy (UTF-16), zwykle reprezentowane jako: '\ x1F600'. Nie mam problemu z tymi w aplikacji, w kodzie. Ale plik zasobów strings.xml ma kodowanie UTF8 i nie radzi sobie poprawnie z 16-bitowymi znakami escape.

Próbowałem za pomocą '\ x1F600' - bo widziałem że '\ u26FF' działa dobrze. Wygląda jednak na to, że nie pożera znaku "x". Ani nie jak notacji regexp '\ x {1F600}'

więc skończyło się stosując zastępczy ciąg '% 1 $ S' i wypełnienie Emoji w kodzie tak:

// greeting_3 is defined as: "hello there %1$s!" 
String s = context.getString(R.string.greeting_3, ""); 
// OR: 
String s = context.getString(R.string.greeting_3, new String(Character.toChars(0x1F61C))); 

To nie jest bardzo eleganckie rozwiązanie ... czy istnieje odpowiedni sposób na umieszczenie 32-bitowych znaków UTF-8 w pliku strings.xml?

Odpowiedz

8

Ale plik zasobów strings.xml jest UTF8

Jeśli jest UTF8 zakodowane, można umieścić swoje emotikony bezpośrednio. Ale ryzykujesz, że twój edytor lub inne oprogramowanie zniszczy je.

Jeśli umieszczasz je w XML, możesz spróbować użyć elementów XML: 😀, Nie jestem pewien, czy Android obsługuje je.

Można również użyć zastępczych par: skonwertuj emoji do UTF-16 i użyj standardowej \u ucieczki. Można na przykład sprawdzić tę stronę, to nawet powie Ci, jak stworzyć litaral ciąg w Java: http://www.fileformat.info/info/unicode/char/1F600/index.htm

→ U + 1F600 → "\uD83D\uDE00"

+4

Próbowałem w sposób bezpośredni, ale to przyczyna es mojej aplikacji do segfault. Dlatego zacząłem szukać alternatyw :-) Wypróbuję inne opcje. – Shoham

+1

Próbowałem tekstu nieprzetworzonego i & # x1f600; z segfault w środowisku wykonawczym i & # xd83d; & # xde00; z błędem kompilacji ("Błąd w pliku XML: przerwanie kompilacji "). Myślę, że możesz bezpiecznie zgłosić błąd, jest on ważny. –

+3

Wiem błąd: https://code.google.com/p/android/issues/detail?id=64892 –

0

jestem zakładając, że jesteś rozwijających się coś podobnego Klawiatura z emotikonami.#EmojiCodeSheet może pomóc w tej

#EmojiCodeSheet

Projektu Łącze:https://github.com/shanraisshan/EmojiCodeSheet


Wszelkie emotikonów można przedstawić w 2 innej formie

  1. kodowy
  2. ciąg

np SMILING_FACE_WITH_SUN_GLASS Emoji

  1. kodowy: 0x1f60e
  2. ciągu: (który \ uD83D \ uDE0E rzeczywiście)

Można łatwo wyświetlaj emotikony w Androidzie, zapisując je XML lub Java, lista jest obecny poniżej

  1. XML as strings.xml
  2. as static constant in JAVA files

wystarczy wymienić te emoji kody z tych emotikonom-images w w aplikacji na Androida, wykonując kilka linii kodu.

+0

Zakładam, że konwersja z" 0x1f60e "na" \ uD83D \ uDE0E "jest kodem do pary zastępczej UTF-16, jak na powyższą odpowiedź? http://www.fileformat.info/info/unicode/char/1F600/index.htm –

-1

Dodaj zasób jak następuje:

<string name="string_title">This is a emoji example <U+1F642></string> 

W Android Studio 3.0 można skopiować i wkleić emotikony:

Emoji

i oto jak to wygląda:

Emoji

+0

nie jest poprawny w pliku zasobów – friedger

Powiązane problemy