首页 > 解决方案 > v21 更新到 Android Studio,现在我有 activity_main 和 activity_main (v21)?我在哪里工作?

问题描述

Android Studio 给我一个关于 v21 更新的警告,所以我做到了。现在在我的 activity_main 文件夹下,我有 2 个文件:activity_main 和 activity_main (v21)。如果我在 activity_main 文件夹上工作,Android Studio 会更新这两个文件吗?(v21) 文件是必需的吗?我不知道该怎么办。

标签: javaandroidandroid-studio

解决方案


Stack Overflow 鼓励这些类型的问题被否决/标记/删除,但我会做得更好。

当您在文件夹(资源)中看到子/类似文件夹时,您看到的是/是匹配res/时将使用的替代资源。config_qualifier

例如:

layouts通常可以看到 value 文件夹具有layouts-v21或类似的版本。

假设你有这个 XML:

res/layout/main.xml

并且您需要为运行 API 21 或更高版本的设备提供一个布局,其中包含仅适用于 API 21 的特定小部件/视图……</p>

一种解决方案(但不是唯一的解决方案)是为这些设备提供备用资源,并在找不到时回退到原始资源:

res/layout-v21/main.xml

如果设备在 API 21 或更高版本上运行,Android 将在运行时自动为您选择“正确”的设备。

如果你提供它(假设你只有 /layout 文件夹中的 main,而不是 v21),当 android 无法在 layout-v21 中找到它时,它会尝试转到下一个(按优先级),在这个案例,只是/布局。

如果它在那里找不到它,你会得到一个异常。:)

这就是“资源” 101。希望它有所帮助。

现在……回答你的问题。如果它们不同,您将需要处理“两者”。实际上,取决于您支持的 minApi(显然低于 21,否则您不需要例外)。如果是这种情况(您支持 21 台以上的设备),那么是的,您需要同时处理这两种设备以确保它们在所有平台上都能正常工作。

或者,对于布局,通常不需要两者兼有。我想说最好有一个共同的布局,并在各自的子文件夹中指定styles.xml和。themesv21

我的意思是……如果some_attribute只适用于 API 21+,你可以有:

values/styles.xmlthat 没有 some_attribute 和 a values-v21/styles.xml有它。有多种方法可以解决这个问题,有时你必须“复制粘贴”东西来复制它们。如果您可以支持 api 21+,那么您将很少需要做出这些例外。(因为 API 21 和 23 带来了很多变化……在那个 API 级别进行区分是很常见的,就像 Android Studio 为您所做的那样,因为 API 21 带来了许多较低 api 不支持的东西)。


推荐阅读