我的项目在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 (其中,AFAIK,应使用layout-long-land和layout-long-port)。
对于它的价值,我将API 15设置为最小值,将API 23设置为构建/目标SDK。
Xoom运行4.1,Nexus 6P运行6.1,我的一个“真正不长”的平板电脑(Teclast x89,1080x1440 4:3显示器)正在运行4.4。
我做错了什么?
我做了一个实验。我删除了layout-long-land和layout-notlong-land目录,将layout-long-port重命名为layout-long,并将layout-notlong-port重命名为layout-notlong。
结果:和以前一样。这三个设备都使用“notlong”布局。
我尝试了另外两台设备,进行了更多的研究,并提出了一个“解决方案”的答案,只要有一天它可能会让其他人免于燃烧4个小时试图解决一个无望的问题。
答案 0 :(得分:0)
嗯,我想我弄清楚我做错了什么......我天真地认为谷歌在其定义中使用常识#34; long" vs" notlong"。
我测试了另外两个设备:
三星Galaxy Note 4(与Nexus 6p相同)正确使用了" long"布局。
三星Galaxy Tab 3(8")使用" notlong"布局。
决定进一步探讨这个问题,我比较了所有5台设备的DisplayMetrics。得到以下结果的分辨率,密度,DPI和纵横比(括号中的长/不长表示我不同意的结果):
| 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谷歌显然做了一个判决电话,并决定(荒谬地,恕我直言)将16:10分类为" notlong" (这将解释Xoom和Tab3的行为)。
所以...似乎Nexus 6p(与Note 4不同)从分辨率计算中排除了168个像素,导致它从裂缝中掉落并最终成为" notlong"由于纵横比为1.66,谷歌的门槛值为0.01。
道德:从API 23开始," long"并且" notlong" 无用作为备用布局选择器,除非谷歌有一天会添加第三个选择器(例如"短")明确匹配仅4(3)显示的ONLY(但是所有)设备,否则将无用(即,具有4:3显示器的设备永远不会被分类为" notlong",即使它使用~128像素的按钮和通知区域。)