0

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

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

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

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

我的理解是Android会首先在合格文件夹中查找布局,然后,如果找不到,则使用不合格文件夹中的布局。

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

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

资源

layout

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

资源

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。

4

2 回答 2

1

看看Android 如何找到最佳匹配资源,它告诉您可以提供多个限定符以及如何选择最佳布局,因此在您对限定符进行排序的情况下(看起来您正在这样做,activity_layout因为正确加载),尝试应用较少的限定符并查看它们includes是否有效。否则,您可以考虑最肮脏的解决方案:layoutb为每个分辨率创建不同的 's 并将它们存储在同一个文件夹中。这意味着每个activity_layout人都会加载它的正确文件。

祝你好运!

于 2012-10-14T17:59:52.410 回答
0

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

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

我已经看到了一些布局问题,这些问题通过重新启动 Eclipse 得到了修复。常见的元素是 ADT,所以我怀疑那里有些脆弱。

于 2012-10-14T19:54:22.817 回答