【发布时间】:2010-12-04 18:36:14
【问题描述】:
Android 的<include /> 元素允许您包含其他 XML 布局。对于跨多个活动的通用标题很有用。
但是,如果您想在同一个视图中多次包含一个布局怎么办?例如,我有一个精心设计的布局,我想在我的视图中显示 3 次。这些实例中的每一个都需要不同的值。因为include 基本上是一个把那个XML 粘贴到这里,所以我需要更强大的东西。
有什么机制可以做到这一点吗?
(我的解释是否正确?)
【问题讨论】:
Android 的<include /> 元素允许您包含其他 XML 布局。对于跨多个活动的通用标题很有用。
但是,如果您想在同一个视图中多次包含一个布局怎么办?例如,我有一个精心设计的布局,我想在我的视图中显示 3 次。这些实例中的每一个都需要不同的值。因为include 基本上是一个把那个XML 粘贴到这里,所以我需要更强大的东西。
有什么机制可以做到这一点吗?
(我的解释是否正确?)
【问题讨论】:
http://www.coboltforge.com/2012/05/tech-stuff-layout/ 的一篇博文(现在已离线,但可以在 https://web.archive.org/web/20160425233147/http://www.coboltforge.com/2012/05/tech-stuff-layout/ 找到)准确解释了该问题(包含多次相同的布局 XML)以及如何解决它!
当您按 id 搜索时,您总是会找到第一个项目,因此第二个小部件是隐藏的。
不过可以解决
<include> -- id1
-- stuff
</include>
<include> -- id2
-- stuff
</include>
所以我们可以通过首先查找 id2 / id1 来找到子元素。
View include_1 = findViewById(R.id.id1);
View include_2 = findViewById(R.id.id2);
最后
include_2.findViewById(R.id.elementx );
【讨论】:
有什么机制可以做到这一点吗?
创建自定义View。例如,Here is a project 我有一个 ColorMixer 自定义小部件。如果您愿意,您可以在一个活动布局中包含几个这样的ColorMixers。每个都可以有自己的参数来调整其操作。
【讨论】:
另一种方法是在 xml 中设置“模板”布局并使用LayoutInflater 对其进行扩展,并根据需要多次添加到您的视图中,并在每个视图中插入自定义值。 Here 是使用 Layout inflater 创建自定义 Toast 视图的示例。
【讨论】:
可以使用android:id指定包含布局的根视图的id;如果定义了一个,它还将覆盖包含布局的 id。同样,您可以覆盖所有布局参数。
基于提供的android:id,您可以通过 id 获取部分,然后您可以再次根据刚刚检索到的部分通过 id 获取元素。这样,您将能够分两步在每个父视图中查找具有相同 id 的所有子视图。
【讨论】:
<include> 时相同)。如果 EditText 位于包含布局的 root 中,则它的 id 会被 <include> 标签中的 id 替换。