我知道这种行为并不是预期的或标准的,但我很好奇是否能够实现。Google也意识到正常-大-超大屏幕计划并不是最好的选择,因此在Android 3.2版本中已经被弃用(layout-swXXXdp对我来说是最好的选择)。
然而,我必须支持一些低于3.2版本的设备,并且可能因此而发生错误。
主要问题是:Galaxy Note 1和Galaxy tab 1(以及其他具有相同规格的设备)从同一个layout-large文件夹中选择资源。但是合理地说,在7英寸以下和7英寸以上的屏幕上需要制作不同的布局。我知道我可以为“异常设备”制作单独的文件夹(例如,如此处所述的layout-large-xhdpi-1280x800),但那样的话,我将不得不维护几乎或完全相同的xml文件,并将它们放置在不同的文件夹中,仅仅因为这些特定的设备。
因此,目标是只维护一个xml包(文件夹)用于7英寸以下的设备和一个用于7英寸以上的设备。我知道有一些技巧,例如:
然而,我必须支持一些低于3.2版本的设备,并且可能因此而发生错误。
主要问题是:Galaxy Note 1和Galaxy tab 1(以及其他具有相同规格的设备)从同一个layout-large文件夹中选择资源。但是合理地说,在7英寸以下和7英寸以上的屏幕上需要制作不同的布局。我知道我可以为“异常设备”制作单独的文件夹(例如,如此处所述的layout-large-xhdpi-1280x800),但那样的话,我将不得不维护几乎或完全相同的xml文件,并将它们放置在不同的文件夹中,仅仅因为这些特定的设备。
因此,目标是只维护一个xml包(文件夹)用于7英寸以下的设备和一个用于7英寸以上的设备。我知道有一些技巧,例如:
- 给xml文件起不同的名字(例如main.xml和main-large.xml),然后在代码中决定使用哪个,但是即使设备无法从代码中确定自己的确切大小(例如7英寸平板电脑可以返回6.8到7.8英寸的比例)。此外,我想使用更“Android风格”的资源文件夹。
- 保留我提到的异常文件夹。
layout
、layout-large
、layout-specifictags1
、layout-specifictags2
等,列表可以扩展。同时specifictags1、tags2和normal具有完全相同的xml文件,但需要为设备提供,以免从layout-large
中选择。整个原因是为了避免这种情况。 - (编辑)@Joe Malin提出了使用别名的想法。不幸的是,我不能在
layout-large-xhdpi-1280x800
中创建一个名为main.xml的别名,该别名指向layout
中的main.xml,因为它会引用自身(形成无限循环)。所以我必须在layout-large-xhdpi-1280x800
中维护一个fakemain.xml,它指向只存在于layout
中的main.xml。但是,我还需要一个在layout
中的fakemain.xml,因为那样我就不必关心代码中的布局,只使用别名的fakemain.xml。然而,这个解决方案仍然可能有效,但实际上并不起作用。如果我在galaxy note上的layout
、layout-large
和layout-large-xhdpi-1280x800
中都有一个fakemain.xml,则该别名将指向layout-large
,使用别名没有任何效果。
问题:
layout-sw600dp概念将授予我最佳和所需的行为,但在API级别13以下不支持。
- 是否有一种方法可以强制设备从此文件夹中选择,或者编写其变量(使用Java反射?- 我知道那非常糟糕)以像普通屏幕一样而不是大屏幕?
- 是否有一种方法只维护两个xml包(文件夹):
- 一个用于7英寸以下的设备,
- 和一个用于7英寸以上的设备。
switch
语句也将难以维护。打个比方:在Web应用程序中使用用户代理嗅探来提供针对IE6的解决方法是合理的。但通常不会说你要尝试为每个平台的每个浏览器版本进行分类,以尝试制作自己的浏览器到目标Web内容的映射。 - CommonsWareswitch
语句,只是一个在xml加载之前必须检查的两种情况。这合理吗? - abbath