Символ Юникода 0x25BA не отображается на Android

#android #unicode

#Android #Юникод

Вопрос:

Я пытаюсь отобразить u25BA символ Юникода в textview, но выполнение

 <TextView android:id="@ id/arrowright" android:layout_width="20dp"
        android:layout_height="240dp" android:gravity="center" android:text="u25BA"
        android:textSize="14sp" android:textColor="#000000" />
  

отображается только пустой прямоугольник. Это работает с другими символами, такими как » u2605″.

Ограничен ли набор символов, которые может отображать Android?

Комментарии:

1. Набор символов, которые может отображать любое устройство , ограничен: если нет шрифта с указанным символом, то он не может быть отображен. И отсутствие шрифта обеспечивает полный охват всей спецификации Юникода.

2. Но возможно ли программно проверить, может ли определенный символ отображаться данным шрифтом?

3. @Patrick: это возможно за пределами Android (или с корневым Android). Вы в основном открываете файл шрифта (это OpenType) и интерпретируете таблицы в соответствии со спецификацией OpenType ( microsoft.com/typography/otspec ). Например, это то, что делает этот инструмент: mihai-nita.net/2007/09/08/charmapex-some-kind-of-character-map . (и, конечно, множество приложений, которые редактируют шрифты напрямую 🙂

4. @Joachim: Arial Unicode Шрифт, который обычно устанавливается с MSOffice, содержит большинство символов Юникода. Он также довольно большой, более 20 МБ.

5. @ccpizza: Согласно Википедии, в последней версии Arial Unicode определено 50 377 символов (или 38 917 символов). А версия 6.0 стандарта Юникода определяет 109 449 символов. Я бы не назвал это «большинством». Хотя я согласен, что он, вероятно, содержит большинство символов, которые нужны большинству людей изо дня в день, моя основная точка зрения остается в силе: ни один шрифт не обеспечивает полного охвата (и такой шрифт имел бы только ограниченное, специализированное использование).

Ответ №1:

XML не позволяет вам использовать u экранирование в Юникоде, используйте правильную кодировку, возможно UTF-8, или экранируйте ее с помощью amp;...; экранирования.

Да, количество символов ограничено тем, что поддерживает текущий шрифт. Используйте браузер шрифтов, чтобы проверить, поддерживается ли нужный символ или нет.

Комментарии:

1. Я могу установить android:text="u2605" , и он правильно отображает соответствующий символ Юникода. Как я могу узнать, какой шрифт использовать, и как я могу его установить?

2. Смотрите мой ответ ниже. Я считаю, что наиболее практичным способом является подготовка вашего смартфона с таблицей возможных значений в Android. Посмотрите приложение, о котором я упоминал.

Ответ №2:

Попробуйте загрузить карту Юникода из маркета и держите ее под рукой при разработке. В нем используется uXXXX обозначение.

И, наконец, как сказал Сорин, помните (если вы этого еще не сделали), что uXXXX (два шестнадцатеричных байта), похоже, работают только в strings.xml (и импортируются в макеты с использованием @string/string_name формата). Или, по крайней мере, кажется, что он работает не во всех SDK или во всех средах (здесь я только что протестировал SDK 2.2, и он не работает). Чтобы избежать проблем (символы в середине литеральных строк и т.д.), Я этого не делаю.

Поскольку большинство людей никогда напрямую не кодируют строки в XML-макетах (проблемы с локализацией и т.д.), Это, как правило, не проблема (и именно поэтому я использую этот формат). Кроме того, как вы можете видеть в приложении выше, это, по-видимому, предпочтительный способ экранирования менее чем тривиальных символов в Android.

Лично я считаю, что именно поэтому я не вижу, чтобы многие люди использовали amp;#int; , я думаю…

Надеюсь, это поможет!

Комментарии:

1. Кстати, я не являюсь автором этого приложения.