我有一个复杂的项目,有很多布局(大约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。
答案 0 :(得分:1)
看一下How Android Finds the Best-matching Resource,它告诉你可以提供多个限定符以及如何选择最佳布局,所以在你正好排序限定符的情况下(看起来像你正在做的那样,{ {1}}已正确加载),尝试应用较少的限定符并查看这些activity_layout
是否正常工作。否则,您可以考虑最脏的解决方案:为每个分辨率创建不同的includes
并将它们存储在同一个文件夹中。这意味着每个layoutb
都会加载正确的文件。
答案 1 :(得分:0)
这很奇怪。我做的其中一件事是重新启动IDEA,但没有解决任何问题。
我刚刚重启我的电脑以安装一些更新,自从启动IDEA后,它就按预期工作了。
我已经看到了一些布局的问题,这些问题是通过重启Eclipse来修复的。共同的元素是ADT,所以我怀疑那里有一些瑕疵。