一个...-v21.xml文件有什么用途?

44

我正在为 Android 4.0 及以上版本开发一个应用程序。我刚刚更新到了 appcompat 22.2.0,但是我在网上看到所有这些与...-v21 / v22.xml 相关的引用。它们有什么用处?它们会产生影响吗?谢谢!

我正在开发一个适用于 Android 4.0 及以上版本的应用程序。我刚刚升级到 appcompat 22.2.0,但是我注意到网上出现了很多关于 ...-v21 / v22.xml 的引用。它们有什么作用?是否会对我的应用程序产生影响?谢谢!

3
您是在讨论values-v21吗?values-v21包含可以应用于Android API 21及更高版本的资源。 - krystian71115
ActionBar在API 11中被添加。要显示ActionBar,您可以在values-v11中设置另一个样式。 - krystian71115
例如,在跟随教程时,我在values-v21文件夹中有一个themes.xml:http://pastebin.com/g0GrFyQT。我不确定我是否真正需要它:S - Jdruwe
如果您将Theme.AppCompat用作AppTheme.Base的父级,则可以将其放置在values目录中。 - krystian71115
我刚刚删除了-v21版本并创建了一个“正常”的style.xml:http://pastebin.com/5P3cGFTM。我这样做是错的吗? - Jdruwe
1个回答

86
我在values-v21文件夹中有一个themes.xml文件。
res/values-v21/目录包含的资源将在运行您的应用程序的设备上使用API Level 21或更高版本时使用。 如果设备运行较旧版本的Android,则将忽略res/values-v21/目录。
它们用于为不同版本的Android提供不同版本的资源。
它们是否起作用?它们会产生影响吗?
themes.xml文件的情况下,API 21及以上设备可以具有继承自Theme.Material的主题。但是,该主题在旧设备上不存在。如果您在res/values/中引用Theme.Material,则您的应用程序将在这些旧设备上崩溃。因此,您需要在res/values/中放置一个适用于您支持的所有设备的主题(例如,对于minSdkVersion为11或更高版本的设备使用Theme.Holo),并在res/values-v21/中覆盖该主题,以改用Theme.Material
您可以在这个示例应用程序中看到,其中Theme.Apptheme(我的应用程序的主题)继承自res/values/中的Theme.Holo并继承自res/values-v21/中的Theme.Material。在运行时使用哪个版本的Theme.Apptheme取决于设备使用的Android版本。

2
@Jdruwe:Theme.AppCompat 及其子类(例如 Theme.AppCompat.Light)适用于 API Level 7 及以上版本,并且 appcompat-v7 处理与该主题相关的所有向后兼容性工作。 - CommonsWare
@Jdruwe 不需要。你可以在values文件夹中创建xml(而不是在values-v21中)。 - krystian71115
3
文件的名称并不重要,样式资源的名称才是关键。如果您在 values/values-21/ 中定义了相同的样式资源名称(且没有其他地方定义),则 API 级别为 21 或更高的设备将使用在 values-21/ 中定义的资源,而运行旧版 Android 的设备则使用在 values/ 中定义的资源。 - CommonsWare
1
@RushiMThakker:该示例使用ListActivity。如果整个活动是ListView,则不需要使用ListActivity中的setContentView()。 “如果我们有minSDKVersion 21,我们需要v21文件夹吗?”-- 不需要。 - CommonsWare
@RushiMThakker:这与此问题无关。这个问题是关于使用Theme.Material的,你需要使用Theme.AppCompat。请提出一个单独的Stack Overflow问题,在其中提供[mcve]和详细说明“不起作用”的含义。 - CommonsWare
显示剩余5条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接