Пользовательский шрифт в 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), текст выглядит немного более жирным, менее равномерным по ширине и более перемешанным при вертикальном выравнивании. Под этой последней частью я подразумеваю, что некоторые символы располагаются вертикально немного выше или ниже, чем другие, что придает тексту ощущение «американских горок».

Рассмотрим скриншоты ниже

Это текст, отображаемый в эмуляторе с тем же разрешением и разрешением на дюйм, что и у Transformer, но с использованием Google API уровня 8.

i45.tinypic.com/142toud.png

Выглядит довольно стандартно, верно?

Теперь рассмотрим текст, отображаемый в эмуляторе с тем же разрешением и разрешением, но с использованием Google API уровня 15:

i47.tinypic.com/24zhekn.png

Сначала текст может выглядеть похожим, хотя вы можете заметить, что он выглядит немного смелее. Тем не менее, посмотрите на «с» в & quot; быстро & quot ;. Вы заметите, что он расположен ниже и выше, чем "c" в первом рендеринге. Вы также заметите, что если вы посмотрите внизу символов в слове «быстрый», они не будут выровнены внизу.

Эти проблемы могут показаться небольшими, но на экранах с большим количеством текста это начинает выглядеть действительно непрофессионально.

Кто-нибудь видел это или есть объяснение? Я бы хотел, чтобы текст выглядел равномерно в более поздних API.

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

 benjamin davis08 июн. 2012 г., 19:27
@kcoppock Спасибо за ответ. getPaintFlags () возвращает 257 для обоих API.
 kcoppock08 июн. 2012 г., 19:12
Определенно происходит другой рендеринг шрифтов. Может быть сглаживание, подсказка отключена, возможно. Можете ли вы увидеть, что значение дляtextView.getPaintFlags() возвращает как для уровня API 8, так и для уровня API 15, и редактировать его в? (@ мне, чтобы я получил уведомление, и я посмотрю)
 HandlerExploit08 июн. 2012 г., 19:44
Я тот, кто задал этот вопрос, и это звучит как проблема, которую мы видели. Единственная разница в том, что я не стал вдаваться в подробности, как вы.
 benjamin davis08 июн. 2012 г., 19:41
@HandlerExploit Да, я смотрел эту публикацию, когда искал в форумах эту проблему. Кажется, это похоже, но я не думаю, что они когда-либо действительно указывали, что им не нравилось в шрифте ... и на него никогда не отвечали, поэтому я решил спросить конкретно. =) Спасибо, что указал на это, хотя.
 HandlerExploit08 июн. 2012 г., 19:35
Это выглядит похоже, или, возможно, дубликатstackoverflow.com/questions/9036184/…, Это никогда не было действительно ответил.

Ответы на вопрос(1)

Решение Вопроса

Paint.DEV_KERN_TEXT_FLAG
Paint.ANTI_ALIAS_FLAG

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

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

Ваш ответ на вопрос