以下
<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上正常工作?
答案 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 :在这种情况下,删除名称空间是个好主意。