ADT如何根据设备大小和方向选择布局XML?

时间:2012-10-14 17:25:50

标签: android android-layout

我有一个复杂的项目,有很多布局(大约40个),为了减少重复,我使用了很多包含。

我在layout-xlarge-land中有一个活动布局,其中包含另一个布局(布局B),它本身只是一组LinearLayout中的包含。

我的模拟器设置为XLARGE和横向,确定,它会选择活动布局。我已经在布局中对活动标题进行了硬编码,因此我可以确认正在使用哪一个。

问题是如果我将布局B放在layout-xlarge-land中,ADT将不会预览我的布局并给出“无法渲染”错误。如果我将布局B移动到res / layout(即没有限定符),它就可以工作。

我的理解是,Android会首先在限定文件夹中查找布局,如果找不到,则使用非限定文件夹中的布局。

这是一个问题,因为布局B对于各种分辨率和方向应该是不同的。

我误解了什么,或者这是ADT / Android的怪癖?如果怪癖,任何解决方法?

  

RES

layout

layout-xlarge-land
    activity_layout.xml    <---- correctly loaded
    layoutb.xml            <---- "cannot render"
     

RES

layout
    layoutb.xml            <---- renders OK
layout-xlarge-land
    activity_layout.xml    <---- correctly loaded

[编辑]我正在使用IDEA,但没有看到与IDE有任何关联。

[编辑] 来自IDEA日志

s.android.uipreview.RenderUtil - InflateException:您必须指定有效的布局参考。布局ID @ layout / data_panel_all_views无效。

这证实了ADT正在寻找res / layout。

2 个答案:

答案 0 :(得分:1)

看一下How Android Finds the Best-matching Resource,它告诉你可以提供多个限定符以及如何选择最佳布局,所以在你正好排序限定符的情况下(看起来像你正在做的那样,{ {1}}已正确加载),尝试应用较少的限定符并查看这些activity_layout是否正常工作。否则,您可以考虑最脏的解决方案:为每个分辨率创建不同的includes并将它们存储在同一个文件夹中。这意味着每个layoutb都会加载正确的文件。

祝你好运!

答案 1 :(得分:0)

这很奇怪。我做的其中一件事是重新启动IDEA,但没有解决任何问题。

我刚刚重启我的电脑以安装一些更新,自从启动IDEA后,它就按预期工作了。

我已经看到了一些布局的问题,这些问题是通过重启Eclipse来修复的。共同的元素是ADT,所以我怀疑那里有一些瑕疵。