layout-sw801dp 和 layout-v21 有什么区别?

What is the difference between layout-sw801dp and layout-v21?

当我有一个 900dp 的设备并且当我 运行 在 api 级别 21+ 当布局文件存在于所有这些文件夹下时,

res/layout/
res/layout-sw801dp/
res/layout-v21/

哪一个会被选中,为什么?

查看 Android 应用程序资源概述,特别是 providing alternate resources。 Table 2 描述了可用的资源限定符。那里说

Table 2 lists the valid configuration qualifiers, in order of precedence...

因此,查看该列表,您在以下目录中定义了资源:

res/layout/: 默认值
res/layout-sw801dp/ : 最小宽度
res/layout-v21/ : 版本 21 及以上

优先顺序如下,第一个匹配停止搜索资源。

res/layout-sw801dp/
res/layout-v21/
res/layout/

由于您的屏幕宽度为 900dp,资源搜索将停止在 res/layout-sw801dp,因为 900dp >= 801dp。如果屏幕宽度为 700dp(<801dp)且 API 级别为 21+,则搜索将停止在 res/layout-v21/。如果版本是 API 18,屏幕宽度为 700dp,则将使用 res/layout/