如何在让另一个孩子可见的情况下调整RelativeLayout的孩子的大小?

时间:2016-07-30 18:19:13

标签: android xml android-layout android-relativelayout

当我在下面的RelativeLayout @ + id / saveCancelBar上调用view.setVisibility(View.VISIBLE)时,它会覆盖FrameLayout的一部分。我希望FrameLayout缩小以适应RelativeLayout。如果我将所有内容放在LinearLayout而不是RelativeLayout中,则显示SaveCancelBar只是将所有内容向上移动并将工具栏的一部分移出屏幕

<RelativeLayout
    android:id="@+id/content_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center|bottom">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="@color/colorPrimary"
        android:elevation="4dp"
        android:layout_alignParentTop="true"
        android:theme="@style/ThemeOverlay.AppCompat.ActionBar"
        app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

    <LinearLayout
        android:id="@+id/content_view_panes"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/toolbar"
        android:orientation="horizontal"
        android:gravity="bottom">

        <WebView
            android:id="@+id/mainWebView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:visibility="gone" />

        <FrameLayout
            android:id="@+id/listContainer"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:background="@color/colorPrimaryDark"
        android:layout_below="@+id/content_view_panes"
        android:visibility="gone"
        android:id="@+id/saveCancelBar">
        <Button
            android:id="@+id/editorCancelButton"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/editor_cancel"
            android:textColor="@color/white"
            android:layout_alignParentLeft="true"
            android:background="@color/colorPrimaryDark"/>
        <Button
            android:id="@+id/editorSaveButton"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:text="@string/editor_save"
            android:textColor="@color/white"
            android:layout_alignParentRight="true"
            android:background="@color/colorPrimaryDark"/>
    </RelativeLayout>
</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

你需要做两件事。

首先,ID为listContainer的FrameLayout不会垂直推卸,因为它的父级layout_height设置为match_parent。您应该将父content_view_panessaveCancelBar包含在具有垂直方向的LinearLayout中,并将layout_height设置为0dplayout_width设置为{{1} }}。对于LinearLayout的子项,这会告诉它填充剩余空间。您不需要更改1的宽度或高度,因为它会根据它的父级调整大小。

现在,当您更改listContainer saveCancelBar的可见度时,content_view_panes将调整其高度。

E.g:

listContainer