поддержка стиля и темы для более низких API - PullRequest
0 голосов
/ 02 ноября 2018

следующие

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="fontFamily">@font/myfont</item>
</style>

работает нормально, но следующее

<style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:fontFamily">@font/myfont</item>
</style>

требуется уровень API 16.

Теперь я в замешательстве, просто скрываю ошибку, удаляя префикс android:, или это будет нормально работать на Android 4.0?

1 Ответ

0 голосов
/ 02 ноября 2018

Сначала давайте рассмотрим, как работают атрибуты в макете. Если вы используете библиотеку поддержки для обработки семейств шрифтов, вы должны написать что-то вроде этого:

<TextView
    app:fontFamily="@font/myfont"
    .../>

Если, с другой стороны, вы использовали Framework API (который существует только в API 16+), вы бы написали следующее:

<TextView
    android:fontFamily="@font/myfont"
    .../>

Когда вы создаете стили, все, что использовало бы пространство имен app: в макете, просто не получает никакого пространства имен вообще. Таким образом, стиль, указывающий

<item name="fontFamily">

будет соответствовать первому примеру выше, а стиль, определяющий

<item name="android:fontFamily">

будет соответствовать второму примеру выше.

Какой бы метод вы ни выбрали, следует руководствоваться этим принципом. Если вы используете библиотеку поддержки, то удаление пространства имен - это хорошая вещь. Если вы не используете библиотеку поддержки, то удаление пространства имен - плохая вещь.

tl; dr : Отбрасывание пространства имен - хорошая идея в этой ситуации.

...