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

时间:2016-11-16 02:04:07

标签: android android-layout android-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 (其中,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”布局。

更新2

我尝试了另外两台设备,进行了更多的研究,并提出了一个“解决方案”的答案,只要有一天它可能会让其他人免于燃烧4个小时试图解决一个无望的问题。

1 个答案:

答案 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像素的按钮和通知区域。