...-v21.xml 有什么用?

What is the use of a ...-v21.xml?

我正在为 android 4.0 及更高版本开发应用程序。我刚刚更新到 appcompat 22.2.0,但我在网上看到所有这些对 ...-v21 / v22.xml 的引用。它们的用途是什么?他们有区别吗?提前致谢!

I had this themes.xml in the values-v21 folder

res/values-v21/ 目录包含当 运行 您的应用的设备处于 API 21 级或更高级别时将使用的资源。如果设备是 运行 旧版本 Android,res/values-v21/ 目录将被忽略。

What are they used for? Do they make a difference?

它们用于为不同版本的Android提供不同版本的资源。

themes.xml 文件的情况下,API 级别 21+ 设备可能具有继承自 Theme.Material 的主题。但是,该主题在旧设备上不存在。如果您在 res/values/ 中有一个主题试图引用 Theme.Material,您的应用程序将在这些旧设备上崩溃。因此,相反,您在 res/values/ 中放置了一个主题,该主题将适用于您支持的所有设备(例如,Theme.Holo 表示 minSdkVersion 为 11 或更高),并且 覆盖 res/values-v21/ 中的主题,改为使用 Theme.Material.

您可以在 this sample app 中看到,其中 Theme.Apptheme(我的应用程序的主题)继承自 res/values/ 中的 Theme.Holo 并继承自 Theme.Material 中的 res/values-v21/。在运行时使用哪个版本的 Theme.Apptheme 取决于设备具有哪个版本的 Android。