Android: проблемы с отображением шрифтов с .ttf> 3MB

Мое Android-приложение нуждается в поддержке на разных языках (например, на китайском и т.д.). Большинство из них находятся в файле DroidSansFallback.ttf от Ascender.

См. Https://android.googlesource.com/platform/frameworks/base/+/master/data/fonts.

На некоторых телефонах Android есть DroidSansFallback.ttf, но с отсутствием многих глифов, например, на NexusOne, который распространяется в США. Символов азиатских шрифтов вообще нет, в основном только латинских и связанных персонажей.

Так что делать?

Я добавил в «активы» свою собственную копию DroidSansFallback.ttf (я также пробовал другие шрифты из других источников) и устанавливал ее во время выполнения с использованием класса Typeface.

С некоторыми телефонами и некоторыми файлами .ttf рендеринг шрифтов полностью зависает, означает, что буквы – это всего лишь несколько точек в одной строке.

После более глубокого анализа проблема сводится к следующему:

  1. Маленькие файлы .ttf работают всегда (<200 КБ)
  2. Большие .ttf файлы вообще не работают (> 3MB)
  3. Если на телефоне установлен полный DroidSansFallback.ttf (который составляет ~ 3,5 МБ), даже шрифт размером 1 или 2 МБ закручивается. Если в телефоне установлена ​​только «облегченная» версия DroidSansDallback.ttf (которая составляет ~ 1 МБ), шрифт 3 МБ отлично работает.

Что здесь не так? Я что-то упускаю? Похоже, что все установленные / используемые шрифты вместе не могут быть больше, чем некоторые хваты размером ~ 4 МБ.

У кого-то была такая же проблема? Я попробовал это на NexusOne (2.1), HTC Hero (2.1), SonyEricson Xperia (1.6) и Motorola MileStone (2.0), все показывают одинаковое поведение.

Спасибо за любые подсказки.

На ваших устройствах не хватает памяти.

Все перечисленные вами устройства довольно старые. Размер кучи составляет около 12 МБ.

По возможности используйте PNG с китайским текстом, предварительно подготовленным.