【发布时间】:2013-03-11 22:19:10
【问题描述】:
我知道这种行为既不是预期的也不是标准的,但我很好奇它是否可以实现。 Google 还意识到 normal-large-xlarge 方案不是最好的方案,因此 从 Android 3.2 弃用了它。 (layout-swXXXdp 对我来说是最好的选择)
但是,我必须支持 3.2 下的设备,并且可能会因为这个系统而行为不端。
主要问题:
Galaxy Note 1 和 Galaxy tab 1(以及其他具有相同规格的设备)从同一 layout-large 文件夹中选择资源。但合理地我需要在 7 英寸和 7 英寸以上的屏幕上进行不同的布局。我知道我可以为“异常设备”创建一个单独的文件夹(例如 here 提到的 layout-large-xhdpi-1280x800),但是我必须在不同的文件夹中维护几个几乎(或完全相同)相同的 xml 文件因为这些特定的设备。
所以目标是只为 7 英寸以下的设备维护一个 xml 包(文件夹),为 7 英寸以上的设备维护一个。我知道有一些技巧,例如:
- 以不同的方式命名 xml-s(main.xml 和 main-large.xml),并在代码中决定选择哪个,但即使设备也无法从代码中决定自己,它们究竟有多大(例如 7英寸平板电脑可以返回 6.8 到 7.8 英寸的刻度)。另外,我想对资源文件夹使用更“androidy”的方式。
- 维护我提到的异常文件夹。
layout、layout-large、layout-specifictags1、layout-specifictags2列表可以扩大。此外,specifictags1、tags2 和 normal 具有完全相同的 xml 文件,但设备不需要从layout-large中选择。完全是为了避免这种情况。 - (EDIT) @Joe Malin 提出了使用别名的想法。不幸的是,我无法在
layout-large-xhdpi-1280x800中创建一个名为 main.xml 的别名,该别名引用layout中的 main.xml,因为它引用了 self(导致无限循环)。所以我必须在layout-large-xhdpi-1280x800中维护一个 fakemain.xml,它指的是只存在于layout中的 main.xml。但是我还需要layout中的 fakemain.xml,因为这样我就不必关心代码中的布局,而只使用作为别名的 fakemain.xml。然而这个解决方案仍然可以工作,但不幸的是在实践中不起作用。如果我在layout、layout-large和layout-large-xhdpi-1280x800中有一个 fakemain.xml 用于 Galaxy Note,那么别名指向layout-large之一,而我使用别名却一无所获。
问题:
layout-sw600dp 概念会给我最好的和需要的行为,但它在 API 级别 13 下不受支持。
- 有没有办法强制设备从这个文件夹中进行选择,或者重写它的变量(使用 java 反射?-我知道这很糟糕)以表现得像普通屏幕不大?
- 有没有办法只维护两个xml包(文件夹):
- 一个用于 7 英寸以下的设备,
- 还有一个用于 7 英寸以上的设备。
【问题讨论】:
标签: android android-layout layout galaxy-tab