Есть ли способ указать, что Android TypeFace должен использовать номера подкладок, а не номера старого стиля?

Я использую Raleway, и по умолчанию используются числа в старом стиле, где 3, 4, 5, 7 и 9 опускаются ниже базовой линии. В iOS я могу указать параметр функции для использования номеров в верхнем регистре (подкладка):

UIFontFeatureSelectorIdentifierKey : @(kUpperCaseNumbersSelector)

Как мне это сделать на Android?


person i_am_jorf    schedule 17.07.2015    source источник
comment
Какой шрифт вы используете? Просто Робото? В противном случае, это шрифт OpenType, который поддерживает оба стиля?   -  person Kevin Coppock    schedule 17.07.2015
comment
Я использую Raleway — это шрифт. И да, он поддерживает оба стиля.   -  person i_am_jorf    schedule 17.07.2015
comment
Я свяжусь с вами в ближайшее время, если никто не сделает. Я считаю, что это возможно изначально с API 21. Вероятно, потребуется несколько хакерское решение для API 20 и ниже.   -  person Kevin Coppock    schedule 17.07.2015


Ответы (1)


Итак, для Android 5.0 и выше (API 21) вы можете использовать свойство fontFeatureSettings, чтобы включить это:

TextView myTextView = findViewById(R.id.myTextView);
myTextView.setFontFeatureSettings("lnum"); // Enabling lining numbers

Который я тестировал для работы с Raleway. К сожалению, это, вероятно, не достаточный вариант. Аналогичный вопрос здесь, в котором предлагается решение повторно загрузите шрифт в генератор шрифтов FontSquirrel и замените глифы номера подкладки на табличный глифы.

person Kevin Coppock    schedule 17.07.2015
comment
Выглядит многообещающе. У меня уже есть старый добрый if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) в моем коде обработки текста, поэтому я могу, по крайней мере, сделать так, чтобы он хорошо выглядел на некоторых телефонах. - person i_am_jorf; 17.07.2015
comment
Если вы добавите android:fontFeatureSettings=lnum в xml, будет ли он обратно совместим? Он не показывает предупреждающее сообщение, что это не так. - person Adam Hurwitz; 01.06.2016
comment
Должно появиться предупреждение, но, скорее всего, все в порядке (как правило, неизвестные атрибуты игнорируются). Единственным исключением было то, что Samsung сделал что-то странное с paddingStart/paddingEnd в какой-то момент, что вызвало сбой, если вы не сделали это условно, поэтому всегда есть вероятность, что вы столкнетесь с проблемами. Хотя я бы поставил на то, что все в порядке. - person Kevin Coppock; 01.06.2016