- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
作为此 question 的后续行动,我想不出任何不应该将每个包含的 XML 布局包装在 <merge>
中的充分理由。一对。
这让我想知道,为什么 ADT 团队不将其设为默认行为?
有没有人不想要这种行为的情况?
顺便提一下Android documentation中的解释的<merge>
tag 比最糟糕的法律协议(protocol)中的措辞更糟糕:
The
<merge />
tag helps eliminate redundant view groups in your view hierarchy when including one layout within another. For example, if your main layout is a verticalLinearLayout
in which two consecutive views can be re-used in multiple layouts, then the re-usable layout in which you place the two views requires its own root view. However, using anotherLinearLayout
as the root for the re-usable layout would result in a verticalLinearLayout
inside a verticalLinearLayout
. The nestedLinearLayout
serves no real purpose other than to slow down your UI performance.
最佳答案
include
的主要用途标签(我看到它的方式)是允许开发人员创建可重用的 xml 组件,以便在同一个 Activity 或/和应用程序中的许多 Activity 中多次使用。为了使该可重用组件真正有用,它需要是自包含的,并且尽可能少的外部连接。从我的角度来看,如果您要使用 merge
每个包含的布局中的标签,这将降低 include
的有用性整体标记。这是我认为会发生这种情况的一个例子:
考虑你想实现一个可重用的 ActionBar
xml 组件嵌入到您的每个 Activity 中。它将包含 TextView
和 Button
水平放置。这样做的布局是:
R.layout.actionbar
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/actionbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/actionbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
LinearLayout
(方向垂直)和一个 Root View 是
RelativeLayout
.上面的布局可以很容易地包含在
LinearLayout
中。 (只要把它放在你想要的地方),
RelativeLayout
也可以。 ,当然要考虑到
RelativeLayout
中的当前元素(请记住
必须 为
layout_width/height
标签设置
include
(例如,从包含的布局的根目录复制),以便考虑其他
layout_*
属性)。
<merge xmlns:android="http://schemas.android.com/apk/res/android" >
<TextView
android:id="@+id/actionbar_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:id="@+id/actionbar_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</merge>
ActionBar
布局并没有告诉我们太多,你只有一个
TextView
和
Button
被包括在某处。现在考虑根是垂直方向的 Activity
LinearLayout
.版面
R.layout.actionbar
不能简单地包括在内,因为这会破坏我们的
ActionBar
,我们需要添加一个额外的
LinearLayout
(方向水平)为我们的布局,使其看起来如所希望的。如您所见,您处于上述情况(没有
merge
标签的布局),但现在您必须记住将包含的布局包装在
LinearLayout
中在父根为
LinearLayout
的位置水平方向方向垂直。
RelativeLayout
时,情况会变得更糟。 , 你不能简单地使用
include
带有
merge
的标签在
RelativeLayout
(阅读
How to get RelativeLayout working with merge and include? 的好问题)。再次,选项是嵌入
include
在
LinearLayout
这使您处于没有
merge
的情况下标记(但现在添加的问题比解决的问题更多)。还阅读此链接的最后一部分
http://code.google.com/p/android/issues/detail?id=2863
include
可能会揭示其他错误标签。
merge
默认情况下,标签在某些情况下可能会导致一些问题。此外,当前系统代表了一种更一致的布局方式(您可以为
include
标签创建布局,就像创建带有根
View
的普通布局一样)。此外,
merge
标签是一种优化,我认为您不应该尝试优化,直到您开始看到一些性能问题(或者您真的想以复杂性为代价挤压每一滴性能)。大多数应用程序在当前系统下都可以正常运行,没有
merge
的具有相当数量 View 的三四级深度布局可以生存。优化完全没有问题。
merge
的另一个问题标签是具有
merge
的膨胀布局因为它的根需要在膨胀时将自己连接到父级。如果你要给
R.layout.actionbar
充气布局,那么您必须将其附加到父级:
View actionBar = getLayoutInflater().inflate(R.layout.actionbar, root, true);
include
的看法-
merge
配对使用。
关于android - 为什么我们不应该将每个包含的 Android XML 布局包装在一个 <merge> 对中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518446/
正如标题中所问,我有两个如下结构的 XML 文件 A.xml //here I want to include B.xml
我有一个 xml 文件。根据我的要求,我需要更新空标签,例如我需要更改 to .是否可以像那样更改标签.. 谢谢... 最佳答案 var xmlString=" "; var properStri
我有这样简单的 XML: Song Playing 09:41:18 Frederic Delius Violin Son
在我的工作中,我们有自己的 XML 类来构建 DOM,但我不确定应该如何处理连续的空格? 例如 Hello World 当它被读入 DOM 时,文本节点应该包含 Hello 和 World
我有以下 2 个 xml 文件,我必须通过比较 wd:Task_Name_ID 和 TaskID 的 XML 文件 2。 例如,Main XML File-1 wd:Task_Name_ID 具有以下
我在 Rails 应用程序中有一个 XML View ,需要从另一个文件插入 XML 以进行测试。 我想说“构建器,只需盲目地填充这个字符串,因为它已经是 xml”,但我在文档中看不到这样做的任何内容
我正在重建一些 XML 提要,因此我正在研究何时使用元素以及何时使用带有 XML 的属性。 一些网站说“数据在元素中,元数据在属性中。” 那么,两者有什么区别呢? 让我们以 W3Schools 为例:
在同一个文档中有两个 XML 声明是否是格式正确的 XML? hello 我相信不是,但是我找不到支持我的消息来源。 来自 Extensible Markup Language
我需要在包装器 XML 文档中嵌入任意(语法上有效的)XML 文档。嵌入式文档被视为纯文本,在解析包装文档时不需要可解析。 我知道“CDATA trick”,但如果内部 XML 文档本身包含 CDAT
XML 解析器和 XML 处理器是两个不同的东西吗?他们是两个不同的工作吗? 最佳答案 XML 解析器和 XML 处理器是一样的。它不适用于其他语言。 XML 是通用数据标记语言。解析 XML 文件已
我使用这个 perl 代码从一个文件中读取 XML,然后写入另一个文件(我的完整脚本有添加属性的代码): #!usr/bin/perl -w use strict; use XML::DOM; use
我正在编写一个我了解有限的历史脚本。 对象 A 的类型为 system.xml.xmlelement,我需要将其转换为类型 system.xml.xmldocument 以与对象 B 进行比较(类型
我有以下两个 XML 文件: 文件1 101 102 103 501 502 503
我有以下两个 XML 文件: 文件1 101 102 103 501 502 503
我有一个案例,其中一个 xml 作为输入,另一个 xml 作为输出:我可以选择使用 XSL 和通过 JAXB 进行 Unmarshalling 编码。性能方面,有什么真正的区别吗? 最佳答案 首先,程
我有包含 XML 的 XML,我想使用 JAXB 解析它 qwqweqwezxcasdasd eee 解析器 public static NotificationRequest parse(Strin
xml: mario de2f15d014d40b93578d255e6221fd60 Mario F 23 maria maria
尝试更新 xml 文件数组时出现以下错误。 代码片段: File dir = new File("c:\\XML"); File[] files = dir.listFiles(new Filenam
我怎样才能完成这样的事情: PS /home/nicholas/powershell> PS /home/nicholas/powershell> $date=(Get-Date | ConvertT
我在从 xml 文件中删除节点时遇到一些困难。我发现很多其他人通过各种方式在 powershell 中执行此操作的示例,下面的代码似乎与我见过的许多其他示例相同,但我没有得到所需的行为。 我的目标是将
我是一名优秀的程序员,十分优秀!