2

我正在尝试通过将其膨胀并使用 FragmentTransaction 将其添加到 Activity 来动态创建一个浮动片段。

当我将它添加到容器中(添加到我在容器中创建的 FrameLayout 中)时,它下面的所有部分都被向下推并且所有视图都发生了变化(我希望视图在有或没有片段的情况下看起来相同) .

我查看了 DialogFragment 的实现,它浮动并且不更改视图,我看到它使用:FragmentTransaction.add(int containerViewId...) 方法,其中 0 作为 containerViewId。在 Google 文档中,它只是写道:“如果为 0,则不会将其放入容器中”。当我将 0 放入 containerViewId 并从视图中删除 FrameLayout 时,片段没有出现。

4

1 回答 1

2

我认为您面临的问题来自这样一个事实,即您将浮动片段添加FrameLayout到已经存在的布局的子元素中,正如您已经看到的那样,它将修改当前布局以为新片段腾出空间。例如,如果您当前的布局是这样的(这只是一个示例):

<LinearLayout>
    <FrameLayout android:id="@+id/here_add_floating_fragment"/>
    <the rest of the layout file with the content that should hold its position />
</LinearLayout>

如果浮动片段被添加到FrameLayout像上面那样的布局中,那么其余的视图确实会被移动以腾出空间。

为防止这种情况,您必须修改布局,以便FrameLayout保持当前布局,如下所示:

<FrameLayout android:id="@+id/here_add_floating_fragment"> 
      <LinearLayout>
          <the rest of the layout file with the content that should hold its position />
      </LinearLayout>
</FrameLayout> 

现在,当您添加新片段时,当前片段Views将保持原位,片段将作为FrameLayout其子堆栈出现在上方。

于 2012-06-26T14:28:11.817 回答