Пользовательский шрифт в Android отличается по-разному в разных API
Я использую собственный шрифт .ttf в моем приложении для Android. Я загружаю его обычным способом:
myTypeface = Typeface.createFromAsset( getAssets(), "myTypeface.ttf");
тогда я назначаю свой шрифт в своей деятельности... довольно простой материал:
TextView tv = (TextView) findViewById(R.id.sample_text);
tv.setTextSize(12);
tv.setTypeface(App.myTypeface);
Проблема, с которой я сталкиваюсь, заключается в том, что на некоторых устройствах, использующих более поздние API (я специально заметил это в эмуляторе для Asus Transformer), текст выглядит немного более смелым, менее однородным по ширине и более перемешанным по вертикали выравнивание. По этой последней части я имею в виду, что некоторые персонажи размещаются вертикально немного выше или ниже других, давая немного ощущения ролика на горках.
Рассмотрим снимки экрана ниже
Это текст, отображаемый на эмуляторе с тем же разрешением и разрешением dpi, что и Transformer, но с использованием уровня API Google 8.
![i45.tinypic.com/142toud.png]()
Выглядит довольно стандартно, верно?
Теперь рассмотрим текст, отображаемый в эмуляторе с тем же разрешением и разрешением dpi, но используя уровень API Google 15:
![i47.tinypic.com/24zhekn.png]()
Сначала текст может выглядеть схожим, хотя вы можете заметить, что это кажется немного более смелым. Однако посмотрите "c" на "быстрый". Вы заметите, что он сидит ниже и выше, чем "c" в первом рендеринге. Вы также заметите, что если вы посмотрите на нижнюю часть символов в слове "быстрый", они не выровнены внизу.
Эти проблемы могут показаться маленькими, но на экранах с большим количеством текста он начинает выглядеть действительно непрофессиональным.
Кто-нибудь видел это или объяснил? Я бы хотел, чтобы текст выглядел единообразно в более поздних API.
Большое спасибо за ваше время!
Ответы
Ответ 1
Хорошо, поэтому в обоих случаях применяются только следующие флаги:
Paint.DEV_KERN_TEXT_FLAG
Paint.ANTI_ALIAS_FLAG
Попробуйте сделать это и посмотрите, не отличаются ли результаты (не обязательно улучшены, но даже заметны):
textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);