声明样式时,当我定义一个项目android:backgroundTint
时,我收到一条警告,指出从API 21开始该功能可用,而我指定的最低API较低(API 17)。另一方面,当我简单地将其替换为backgroundTint
时,警告消失了。谁知道那是为什么?
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:backgroundTint">#0F0</item>
</style>
除此之外,如果我对单个组件(例如按钮)使用
android:backgroundTint
,则无论我项目的最低SDK是什么,都不会收到警告或错误。这有点令人困惑。 最佳答案
它为何在运行时起作用:AppCompat支持库向后移植了许多后来的API级别的功能,其样式定义了prefix-free backgroundTint
attribute。
Lint 不提示的其他原因:样式没有以android:
开头的属性未针对已知属性名称进行验证。实际上,您可以将任何字符串放入item
name
属性。例如:
<item name="iJustInventedThis">foo</item>
在布局小部件中,您会因为 Lint 条而提示缺少前缀或属性未知。如果您有一个AppCompat窗口小部件,例如
AppCompatImageView
,则可以使用backgroundTint
属性。