强制设备从资源文件夹获取资源



我知道这种行为是不期望的,也不是标准的,但我很好奇它是否可以实现。Google也意识到normal-large-xlarge模式并不是最好的,所以从Android 3.2的中弃用了。(layout-swXXXdp是我最好的选择)

然而,我必须支持3.2下的设备,并且可能因为这个系统而行为不正常。

主要问题

Galaxy Note 1和Galaxy tab 1(以及其他具有相同规格的设备)从同一个layout-large文件夹中选择资源。但我需要在7英寸以下和7英寸以上的屏幕上进行不同的布局。我知道我可以为"异常设备"(如这里提到的layout-large-xhdpi-1280x800)创建一个单独的文件夹,但这样我就必须在不同的文件夹中维护几个几乎(或完全)相同的xml文件,只是因为这些特定的设备。

因此,目标是为7英寸以下的设备只维护一个xml包(文件夹),为7英寸以上的设备维护一个xml包(文件夹)。我知道有一些技巧,比如:

  1. 以不同的方式命名xml-s (main.xml和main-large.xml),并在代码中决定选择哪个,但即使是设备也不能从代码中决定自己的大小,它们到底有多大(例如7英寸的平板电脑可以从6.8英寸返回到7.8英寸)。此外,我想使用更"安卓"的方式与资源文件夹。
  2. 如前所述,
  3. 维护异常文件夹。layout, layout-large, layout-specifictags1, layout-specifictags2,列表可以扩大。另外,specifictags1、tags2和normal具有完全相同的xml文件,但需要设备不从layout-large中选择。整个原因就是为了避免这种情况。
  4. (EDIT)使用别名的想法是由@Joe Malin提出的。不幸的是,我不能在layout-large-xhdpi-1280x800中创建一个名为main.xml的别名,该别名指的是layout中的main.xml,因为它指的是self然后(使无限循环)。因此,我必须在layout-large-xhdpi-1280x800中维护一个fakremain .xml,该xml引用仅存在于layout中的main.xml。但然后我还需要一个fakemain.xml在layout,因为这样我就不必关心从代码布局,只使用fakemain.xml这是一个别名。然而,这个解决方案仍然可以工作,但不幸的是在实践中不起作用。如果我在layout, layout-largelayout-large-xhdpi-1280x800中有一个fakremain .xml用于galaxy note,那么别名指向layout-large,并且我通过使用别名没有取得任何成果。

问题:

layout-sw600dp概念会给我最好的和需要的行为,但它不支持API级别13。

  • 有没有办法强制设备从这个文件夹中选择,或者写在它的变量(java反射)?-我知道这很糟糕)表现得像正常的屏幕不大?
  • 是否有办法只维护两个xml包(文件夹):
    • 一个用于7英寸以下设备,
    • 和一个用于7英寸以上设备。

然而,在3.2下有一些设备我必须支持

不是很多。

是否有一种方法可以强制设备从这个文件夹中进行选择,或者重写其变量(使用java反射)?-我知道这很糟糕)表现得像正常的屏幕不大?

。然而,你可以找到那些少数设备的型号,并选择为它们加载不同的布局(例如,R.layout.main通常,R.layout.you_are_worrying_about_this_way_too_much用于pre-API Level 13 7"平板电脑的少数型号)。

是否有办法只维护两个XML包(文件夹):一个用于7英寸以下的设备,另一个用于7英寸以上的设备

为了安全起见,我会选三个:

  • res/layout/
  • res/layout-sw600dp/ for 7"及以上
  • res/layout-xlarge/,可能使用res/layout-sw600dp/中的别名,用于少数xoom, Tab 10.1's等没有升级到3.2

我认为最后我得到了最好的解决方案。不知何故,我没有注意到,有两种类型的别名;@Joe Malin链接的那个,还有这个。

不幸的是,第一种类型不是解决方案,但第二种正是我正在寻找的,开发人员页面描述了我需要的解决方案:

res/layout/main.xml: single-pane layout

res/layout-large: multi-pane layout

layout res/layout-sw600dp: multi-pane layout

最后两个文件是相同的,因为其中一个将被Android 3.2设备匹配,另一个是为平板电脑和电视带来的好处Android版本

为了避免在平板电脑和电视(和,您可以使用别名文件。

所以我需要使布局与layout文件夹内的其他名称布局的差异;比如layout/mainnormal.xmllayout/mainlarge.xml。然后我需要在不同的values文件夹中制作layout.xml,并按照上面的链接定义别名。

例如,我需要一个values/layout.xml,一个values-large-xhdpi-1280x800/layout.xml(适用于galaxy Note),一个values-large/layout.xml(适用于更大的设备),也许还有一个layout-sw600dp/layout.xml

在前两个中,我需要为mainnormal.xml创建别名,为mainlarge.xml创建其他别名。这样,我就不需要在代码中知道我使用的是哪种类型,只需使用id,例如R.layout.main

前两种情况下的layout.xml:

<resources>
    <item name="main" type="layout">@layout/mainnormal</item>
</resources>

后一种情况:

<resources>
    <item name="main" type="layout">@layout/mainlarge</item>
</resources>

创建别名资源会有帮助吗?创建别名资源?

相关内容

  • 没有找到相关文章

最新更新