如何在使另一个 child 可见时调整 RelativeLayout child 的大小?
How to resize child of RelativeLayout when making another child visible?
当我在下面的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>
你需要做两件事。
首先,id 为 listContainer
的 FrameLayout 不会垂直移动,因为它的父级已将 layout_height
设置为 match_parent
。您应该将父 content_view_panes
和 saveCancelBar
包装在垂直方向的 LinearLayout 中,并将 layout_height
设置为 0dp
,将 layout_width
设置为 1
.对于 LinearLayout 的子项,这会告诉它填充剩余的 space。您不需要更改 listContainer
的宽度或高度,因为它会根据其父项调整大小。
现在,当您更改 saveCancelBar
的可见性时,content_view_panes
和 listContainer
的高度将得到调整。
例如:
<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:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar"
android:orientation="vertical">
<LinearLayout
android:id="@+id/content_view_panes"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<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>
</LinearLayout>
当我在下面的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>
你需要做两件事。
首先,id 为 listContainer
的 FrameLayout 不会垂直移动,因为它的父级已将 layout_height
设置为 match_parent
。您应该将父 content_view_panes
和 saveCancelBar
包装在垂直方向的 LinearLayout 中,并将 layout_height
设置为 0dp
,将 layout_width
设置为 1
.对于 LinearLayout 的子项,这会告诉它填充剩余的 space。您不需要更改 listContainer
的宽度或高度,因为它会根据其父项调整大小。
现在,当您更改 saveCancelBar
的可见性时,content_view_panes
和 listContainer
的高度将得到调整。
例如:
<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:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/toolbar"
android:orientation="vertical">
<LinearLayout
android:id="@+id/content_view_panes"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<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>
</LinearLayout>