PREAMBLE: начиная с API 17 (Android 4.2), существует метод TextView.setTextLocale()
, который явно решает эту проблему для TextViews и производных классов. Назначьте японскую локаль (Locale.JAPAN
), и символы Unihan будут выглядеть японскими.
У меня есть приложение на Android, которое отображает японский текст в WebViews и TextViews. Есть некоторые китайские иероглифы (кандзи), которые по соглашению выглядят по-разному в Китае и в Японии, но имеют одинаковую кодовую точку Unicode. Обычно браузер полагается на тег lang
, чтобы выбрать правильный глиф. В Android все они по умолчанию имеют китайские фигуры, а я хочу японские фигуры.
Проблема хорошо объяснена в этой статье . Эта статья также служит прекрасной иллюстрацией проблемы - при просмотре на Android (до 2.2) все символы в «Примерах символов, зависящих от языка» выглядят одинаково, и на китайском.
Использование атрибута lang="ja"
не помогает. Переключение всей локали системы на японский также не помогает.
Мне интересно, какие телефоны Android продаются в Японии. Выглядят ли такие персонажи, как 直, Chinese, Chinese в китайском стиле? Я предполагаю, что нет.
Итак, вопросы: существуют ли официальные локализованные изображения Android? Могу ли я получить один для запуска на эмуляторе? Является ли шрифт DroidSansFallback по-прежнему единственным шрифтом с поддержкой CJK? И если да, то такой же, как на ванильном Android США?
Я надеюсь, что японские глифы спрятаны где-то глубоко в шрифте (приватная область Юникода или что-то в этом роде). Если так, я мог бы использовать их ...
РЕДАКТИРОВАТЬ: находится DroidSansJapanese.ttf, установил его на эмуляторе, скопировав в / system / fonts, перезапустил. Не имеет значения внешний вид статьи Unihan. Даже область подсказок при вводе текста на японском языке (которая должна быть лучше знакома) отображается так, как если бы она была на китайском.
Как узнать имя гарнитуры DroidSansJapanese.ttf? У меня такое ощущение, что это все еще Droid Sans, такой же, как во встроенном шрифте DroidSansFallback. Но если они содержат одинаковую гарнитуру, что определяет, какой из них должен иметь приоритет? Казалось бы - система локали, но, видимо, нет. Шрифты в Android устанавливаются только копированием, верно?