较低API的样式和主题支持

时间:2018-11-02 16:29:50

标签: android android-styles android-api-levels

以下

<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 :(得分:2)

首先,让我们考虑属性在布局中的工作方式。如果您使用支持库来处理字体系列,则应编写如下内容:

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

另一方面,如果您使用的是框架API(仅在API 16+上存在),则应编写以下代码:

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

创建样式时,在布局中使用app:名称空间的所有内容根本不会获得任何名称空间。所以样式指定

<item name="fontFamily">

对应于上面的第一个示例,而样式指定

<item name="android:fontFamily">

对应于上面的第二个示例。

您选择使用的任何一种都应遵循此原则。如果您使用的是支持库,那么删除名称空间是一件好事。如果您不使用支持库,那么删除名称空间是一件坏事。

tl; dr :在这种情况下,删除名称空间是个好主意。