【问题标题】:Android Studio shows warning: Element merge is not allowed hereAndroid Studio 显示警告:此处不允许元素合并
【发布时间】:2015-09-06 18:05:00
【问题描述】:

我基于 LinearLayout 创建自定义视图。类扩展了 LinearLayout 类,在布局中我有:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <merge>
        some staff here
    </merge>
</layout>

Android Studio 显示警告 Element merge is not allowed here,但应用可以正常工作。

怎么了?

【问题讨论】:

  • 据我了解,使用 作为根标签。 是所有布局数据的标签,不仅仅是布局本身。看这里:developer.android.com/tools/data-binding/…
  • 我认为这不是解决方案。如果我将&lt;merge&gt; 标记为根并将&lt;layout&gt; 放入其中,我会收到一个警告,即该布局不允许在那里并且它拒绝编译。至少当&lt;layout&gt; 是根时它可以编译。

标签: android android-layout android-databinding


【解决方案1】:

我相信这只是 Android 工作室的一个小故障。甚至官方文档也将merge 作为layout 的直接子代:https://developer.android.com/topic/libraries/data-binding/index.html

编辑:我在那里提交了一个错误:https://code.google.com/p/android/issues/detail?id=286406&thanks=286406&ts=1490873944

Edit2:在 AS 3.5 Canary 12 中修复了错误 \o/

【讨论】:

  • 它说不支持
  • @Shujito 你能分享你的来源吗?文档说:Data binding does not support include as a direct child of a merge element. 这意味着 不能是 的子级。它没有说明 的子级。我错过了什么吗?请澄清。
  • 我试过什么?我尝试将 添加为 的子项,但正如 OP 所说,我在 Android Studio 中收到警告。我没有在文档中看到不支持此用例的任何地方。如果您在developer.android.com/topic/libraries/data-binding/index.html 找到它,请在此处复制粘贴相关部分。谢谢。
  • @Shujito 是的,但它不受支持,因为“数据绑定不支持包含作为合并元素的直接子元素”,而不是因为数据绑定完全不支持合并(至少根据此文档)。
【解决方案2】:

实际上你根本不需要合并,因为你在根目录中有 databisnig 的布局。 这里的 标签是多余的!

使用 标签

标签有助于消除视图中的冗余视图组 将一个布局包含在另一个布局中时的层次结构

发件人:Android documentation

合并时不会绘制布局,绘制时系统会忽略它们。

批准我在 Android Device Monitor 中通过 Hierarchy View 跟踪布局以进行布局 .. 它不存在,这意味着它与合并标记执行相同的工作。你可以自己查!

希望能有所帮助..

【讨论】:

  • 刚试了一下,得到了这个错误Error:Only one layout element and one data element are allowed. /Users/davethomas/dev*****t.xml has 3 除了数据元素之外,布局中不能有多个元素。
  • 确实如此。您需要将所有内容设置在一个布局下。在布局下
【解决方案3】:

使&lt;merge&gt;成为文件中的第一个标签。

【讨论】:

  • 我不能。如果我这样做,则不会生成 bindind 文件。
猜你喜欢
  • 2018-07-22
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-15
  • 1970-01-01
相关资源
最近更新 更多