子视图与其父级

时间:2016-03-30 16:07:19

标签: android xml android-layout android-fragments

背景

在我的应用程序中,我有很多共享相同静态叠加层的片段。每个片段都可以动态调整大小(即它的权重可能会改变),所以我希望我的叠加层的大小与它同步。因此,要么让他们成为兄弟姐妹,要么就像我想到的那样,让一个人进入另一个兄弟姐妹。第一种方法工作正常,但它意味着引入一个额外的ViewGroup,这似乎是多余的(或不是吗?)。后者是我遇到问题的那个。

问题

考虑这两种布局。

Container R.id.container是我将片段放在FragmentManager运行时的地方。 片段R.id.overlay是我的叠加层。

区别在于哪一个是父母。

布局A.

<FrameLayout
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment class="com.example.OverlayFragment"
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>

布局B。

<fragment class="com.example.OverlayFragment"
    android:id="@+id/overlay"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</fragment>

两个情况下,我的叠加层最终低于容器(按z轴)。也就是说,无论容器在层次结构中的作用如何,容器都会保持重叠。

在这种情况下定义视图的z顺序有哪些规则?它只是初始化的顺序吗?我无法谷歌。

感谢。

1 个答案:

答案 0 :(得分:1)

来自documentation

  

当系统创建此活动布局时,它会实例化每个活动布局   在布局中指定的片段并调用onCreateView()方法   对于每一个,检索每个片段的布局。系统插入   片段返回的视图直接代替   元件。

所以我认为你应该使用这样的东西:

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <fragment class="com.example.OverlayFragment"
        android:id="@+id/overlay"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</FrameLayout>