对较低 API 的样式和主题支持
style and theme support for lower APIs
以下
<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 上可以正常工作?
首先,让我们考虑一下属性在布局中的工作方式。如果你使用支持库来处理字体系列,你会这样写:
<TextView
app:fontFamily="@font/myfont"
.../>
另一方面,如果您使用的是 API 框架(仅存在于 API 16+ 上),您可以这样写:
<TextView
android:fontFamily="@font/myfont"
.../>
当您创建样式时,任何在布局中使用 app:
命名空间的东西根本不会获得任何命名空间。所以样式指定
<item name="fontFamily">
将对应于上面的第一个示例,而样式指定
<item name="android:fontFamily">
对应上面的第二个例子。
无论您选择使用哪个,都应遵循这一原则。如果您使用的是支持库,那么删除命名空间是一件好事。如果您不使用支持库,那么删除命名空间是一件坏事。
tl;dr:在这种情况下删除命名空间是个好主意。
以下
<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 上可以正常工作?
首先,让我们考虑一下属性在布局中的工作方式。如果你使用支持库来处理字体系列,你会这样写:
<TextView
app:fontFamily="@font/myfont"
.../>
另一方面,如果您使用的是 API 框架(仅存在于 API 16+ 上),您可以这样写:
<TextView
android:fontFamily="@font/myfont"
.../>
当您创建样式时,任何在布局中使用 app:
命名空间的东西根本不会获得任何命名空间。所以样式指定
<item name="fontFamily">
将对应于上面的第一个示例,而样式指定
<item name="android:fontFamily">
对应上面的第二个例子。
无论您选择使用哪个,都应遵循这一原则。如果您使用的是支持库,那么删除命名空间是一件好事。如果您不使用支持库,那么删除命名空间是一件坏事。
tl;dr:在这种情况下删除命名空间是个好主意。