如何在不使用嵌套布局的情况下对多个视图进行分组

时间:2016-11-12 12:14:53

标签: android android-layout

考虑这种情况:

<LinearLayout style="@style/Basic_W_mp_H_wc_Vertical">

    <!-- IMAGE-1 -->
    <TextView style="@style/Copyright_TextView_1" />
    <ImageView style="@style/Copyright_Image_1" />
    <include layout="@layout/layout_copyright_info"/>
    <View style="@style/HorizontalSeparatorGray"/>

    <!-- IMAGE-2 -->    
    <TextView style="@style/Copyright_TextView_2" />
    <ImageView style="@style/Copyright_Image_2" />
    <include layout="@layout/layout_copyright_info"/>
    <View style="@style/HorizontalSeparatorGray"/>

    <!-- IMAGE-X -->
    [...]
</LinearLayout>

现在我想隐藏IMAGE-1的版权信息。我有两个选择:

  1. 使用LinearLayout创建 wrap-layout Id),以便我可以找到并隐藏它
  2. 为{em>每个视图提供Id查找并隐藏它们。
  3. 第一个选项可以使用,但我不想为此创建额外的nested layout。 第二个选项也可以,但是如果每个视图都有一个Id,我的布局将变得不可读。

    我知道有第三个内存优化选项可以对多个视图进行分组,但我不记得它是如何工作的,谷歌搜索总是给我ViewGroup ...

    有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用名为merge标记的内容,并将其与include标记配对。它的作用是允许您在不同的文件中使用相同的布局(因为您似乎有多个组在一起)。 <merge/>标记会将元素合并到顶级布局(在本例中为LinearLayout)。我没有在这种情况下使用它,所以我想会发生什么是你将无法在一个组中检索它们。值得一试。

我认为选项1也不是一个糟糕的选择,原因如下:

  1. 编码更容易。如果你不将它们组合在一起,那么你将有额外的行并记住额外​​的ID。只有一个布局环绕它,你就可以隐藏一个布局。

  2. 维护起来比较容易。如果您更改版权外观会怎样?如果要更改布局的其余部分会发生什么?只需一个包装,就可以更容易地用一个视图摆弄,内部的一切都保持不变。

  3. 表现不佳 总的来说,这看起来像是最顶层的根视图。膨胀这个布局不会像你说的那样糟糕,膨胀ListView项目。这是一次又一次的操作,就是这样。你不想陷入做premature optimization的陷阱,你牺牲代码可维护性而不利于优化。