声明样式时,当我定义一个项目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属性。

10-07 23:07