给定像素密度和 API 版本的 运行 设备,Android select 如何获得正确的资源?

How will Android select the correct resource given the pixel density and API version of the running device?

我正在研究 Android 个示例,我对 res 文件夹中的结构感到很困惑。

res
├───drawable-hdpi
│       ic_action_search.png
│       ic_launcher.png
│
├───drawable-ldpi
│       ic_launcher.png
│
├───drawable-mdpi
│       ic_action_search.png
│       ic_launcher.png
│
├───drawable-xhdpi
│       ic_action_search.png
│       ic_launcher.png
│
├───layout
│       activity_main.xml
│       activity_result.xml
│
├───menu
│       activity_main.xml
│       activity_main_activity2.xml
│       activity_result.xml
│
├───values
│       dimens.xml
│       strings.xml
│       styles.xml
│
├───values-large
│       dimens.xml
│
├───values-v11
│       styles.xml
│
└───values-v14
        styles.xml

我有四个问题:

1 - Android 什么时候知道什么时候使用 hdpi, ldpi, ...图片资源的变化?

2 - Android 何时知道何时使用 values 或任何 values-vAPI_VERSION?如果我有 API 13,它会使用 values-v11 还是 values-v14?

3 - Android 何时会使用 values 文件夹中的资源?他什么时候不会?例如,如果我有 API 14,他会使用 values 文件夹中除 styles.xml[=51 之外的所有文件吗? =],它将被 values-v14?

中的 styles.xml 文件覆盖

4 - 我可以也有文件夹如 menu-v11, menu-ldpi, layout-ldpilayout-v14?

我已经阅读了 here, here and here 的文档,但他们没有回答其中的大部分问题。

谢谢!

Android 通过查询您的设备知道它。

会自动得到:

  • 1,密度;
  • 2API级。

3 您的主题和样式覆盖系统的。
4 是的 - 至少,我尝试了 layout-portlayout-land

如果当前设备的 API 级别为 13,则将选择 values-v11 文件夹。

这是因为它将匹配 lower API 级别。
values-11 说:"from 11 on"(直到找到更大的匹配值文件夹)。