Android – 显示/隐藏片段留下一个空白区域

鉴于:

  1. 屏幕上的两个垂直放置的元素(ViewPager和Fragment)
  2. 第一个当前选定片段(ViewFlipper)中的操作在顶部片段中的基于文本的视图和基于WebView的视图之间切换,并隐藏/显示底部片段。

观察到的:

  1. 隐藏底部片段会留下底部片段所在的空白空间。

我尝试了Relative和LinearLayout(顶部的片段设置为weight=1 ),但是在底部片段被移除后,两者都没有效果。底部仍然有空的空间

这是顶层布局文件:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <android.support.v4.view.ViewPager android:id="@+id/pager" android:layout_width="fill_parent" android:layout_height="0dip" android:layout_weight="1"/> <!-- This gets replaced with appropriate fragment at run time --> <LinearLayout android:id="@+id/scrollFragmentPlaceholder" android:layout_width="fill_parent" android:layout_height="wrap_content" android:minHeight="110dip" /> </LinearLayout> 

这是切换片段的代码

  Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment); if (scroll.isHidden() == isWebView) return; // already handled, do nothing FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); if (scroll != null && scroll.isAdded()) { if (isWebView) { tr.hide(scroll); } else tr.show(scroll); } tr.commit(); 

以下是它的外观: 底部的片段是隐藏的

Solutions Collecting From Web of "Android – 显示/隐藏片段留下一个空白区域"

一个月后,我想出了如何做到这一点。 原来,只是隐藏片段是不够的,基本上我需要隐藏/显示包含片段的shell。 它仍然是最初在XML中定义的LinearLayout。 事实上,在原始布局上设置可见性就足以显示/隐藏片段。 所以现在问题的代码如下所示:

 public void onJobViewToggled(final boolean isWebView) { if (isFinishing()) return; final Fragment scroll = getSupportFragmentManager().findFragmentById(R.id.scrollFragment); if (scroll.isHidden() == isWebView) return; // already handled, do nothing final FragmentTransaction tr = getSupportFragmentManager().beginTransaction(); if (scroll != null && scroll.isAdded()) { if (isWebView) { tr.hide(scroll); // shell is the original placeholder shell.setVisibility(View.GONE); } else { tr.show(scroll); shell.setVisibility(View.VISIBLE); } } tr.commit(); } 

请注意,您仍然想要显示/隐藏片段以使其工作