宽屏设备正在使用 layout-notlong-land 和 layout-notlong-port 备用资源

Widescreen devices are using layout-notlong-land and layout-notlong-port alternate resources

我的项目在 src/main/:

下有五个布局目录
layout
layout-long-land
layout-long-port
layout-notlong-land
layout-notlong-port

...每个都包含一个名为"layout_main.xml" 的文件。每个布局都包含一个 TextView,其值指示实际使用的布局 Android。

我的问题:每个设备都在使用 layout-notlong-land 和 layout-notlong-port(取决于当前方向),包括我的(非常非常宽屏)Nexus 6p和我的 16:10 Xoom(据我所知,应该使用 layout-long-land 和 layout-long-port)。

对于它的价值,我将 API 15 设置为最小值,将 API 23 设置为 build/target SDK。

Xoom 是 运行 4.1,Nexus 6P 是 运行 6.1,我的 "genuinely notlong" 平板电脑(Teclast x89,1080x1440 4:3 显示屏)是 运行 4.4.

我做错了什么?

更新

我做了一个实验。我删除了layout-long-land和layout-notlong-land目录,将layout-long-port重命名为layout-long,将layout-notlong-port重命名为layout-notlong。

结果:和之前一样。所有三个设备都使用 "notlong" 布局。

更新 2

我又尝试了两种设备,进行了更多研究,并得出了一个 "solution" 的答案,只是因为它可能有一天会让其他人免于花费 4 个小时试图解决一个无望的问题。

好吧,我想我知道我做错了什么......我天真地假设 Google 在其对 "long" 与 "notlong" 的定义中使用了常识。

我测试了另外两个设备:

  • Samsung Galaxy Note 4(与 Nexus 6p 相同的显示屏)正确使用了 "long" 布局。

  • Samsung Galaxy Tab 3 (8") 使用 "notlong" 布局。

决定进一步探索这个问题,我比较了所有 5 台设备的 DisplayMetrics,得到了以下分辨率、密度、DPI 和宽高比的结果(括号中的 long/notlong 表示我不知道的结果不同意):

|   Nexus 6p          | 2392x1440 | 3.5 | 515dpi | 1.66 | (notlong)
|   Note 4            | 2560x1440 | 4.0 | 640dpi | 1.78 | long
|   Teclast x89       | 1368x1080 | 1.5 | 240dpi | 1.27 | notlong
|   Galaxy Tab 3 (8") | 1280x800  | 1.33| 213dpi | 1.6  | (notlong)
|   Motorola Xoom     | 1232x800  | 1.5 | 160dpi | 1.54 | (notlong)

|   Generic 1920x1080 | 1920x1080 | --- | ------ | 1.78 | long
|   Arbitrary 5:3     | --------- | --- | ------ | 1.67 | long

根据 Android resource notlong / long identifiers not working Google 显然做出了判断并决定(荒谬地,恕我直言)将 16:10 归类为 "notlong"(这将解释Xoom 和 Tab3).

所以...看起来 Nexus 6p(与 Note 4 不同)在分辨率计算中排除了 168 个像素,导致它从裂缝中掉落并最终成为 "notlong"纵横比为 1.66,缺少 Google 的阈值 0.01.

寓意:从 API 23 开始,"long" 和 "notlong" 作为备用布局选择器 无用 ,并且将保持无用,除非Google 有一天会添加第三个选择器(如 "short"),它明确匹配仅(但所有)具有 4:3 显示器的设备(即具有 4:3 显示器的设备应该 永远不会被归类为"notlong",即使按钮和通知区域使用了~128像素。)