Подтвердить что ты не робот

Пользовательский шрифт в 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.

Большое спасибо за ваше время!

4b9b3361

Ответ 1

Хорошо, поэтому в обоих случаях применяются только следующие флаги:

Paint.DEV_KERN_TEXT_FLAG
Paint.ANTI_ALIAS_FLAG

Попробуйте сделать это и посмотрите, не отличаются ли результаты (не обязательно улучшены, но даже заметны):

textView.setPaintFlags(textView.getPaintFlags() | Paint.SUBPIXEL_TEXT_FLAG);