Вопрос по rendering, api, android – Пользовательский шрифт в Android отображается по-разному в разных API

30

Я использую собственный шрифт .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.

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

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

Ваш Ответ

1   ответ
58

Paint.DEV_KERN_TEXT_FLAG
Paint.ANTI_ALIAS_FLAG

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

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

Похожие вопросы