如何使视图填充剩余的空间?

我正在devise我的应用程序UI。 我需要一个布局如下所示:

所需布局的例子

(<和>是button)。 问题是,我不知道如何确保TextView将填充剩余的空间,用两个button有固定的大小。

如果我为文本视图使用fill_parent,则不能显示第二个button(>)。

我如何制作一个看起来像图像的布局?

来自woodshy的回答为我工作,它比Ungureanu Liviu的答案简单,因为它不使用RelativeLayout 。 我正在给我的布局清晰:

 <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" > <Button android:layout_width = "80dp" android:layout_weight = "0" android:layout_height = "wrap_content" android:text="&lt;"/> <TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_weight = "1"/> <Button android:layout_width = "80dp" android:layout_weight = "0" android:layout_height = "wrap_content" android:text="&gt;"/> </LinearLayout> 

如果将<TEXT VIEW>放置在LinearLayout中,则为TextView设置<和>的Layout_weight属性为0和1。
如果RelativeLayout左alignment和右alignment,并将TextView左侧的“布局”和“布局右侧”属性设置为<和>的ID,

如果你使用RelativeLayout ,你可以这样做:

 <RelativeLayout android:layout_width = "fill_parent" android:layout_height = "fill_parent"> <ImageView android:id = "@+id/my_image" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:layout_alignParentTop ="true" /> <RelativeLayout android:id="@+id/layout_bottom" android:layout_width="fill_parent" android:layout_height = "50dp" android:layout_alignParentBottom = "true"> <Button android:id = "@+id/but_left" android:layout_width = "80dp" android:layout_height = "wrap_content" android:text="&lt;" android:layout_alignParentLeft = "true"/> <TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_toLeftOf = "@+id/but_right" android:layout_toRightOf = "@id/but_left" /> <Button android:id = "@id/but_right" android:layout_width = "80dp" android:layout_height = "wrap_content" android:text="&gt;" android:layout_alignParentRight = "true"/> </RelativeLayout> </RelativeLayout> 

这很简单你设置minWidth或minHeight,取决于你在找什么,水平或垂直。 对于另一个对象(你想填充剩余空间的那个对象),你设置1的权重(设置宽度来包装它的内容),所以它将填充其余的区域。

 <LinearLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:gravity="center|left" android:orientation="vertical" > </LinearLayout> <LinearLayout android:layout_width="80dp" android:layout_height="fill_parent" android:minWidth="80dp" > </LinearLayout> 

使用ConstraintLayout ,我发现了类似的东西

 <Button android:id="@+id/left_button" android:layout_width="80dp" android:layout_height="48dp" android:text="&lt;" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toRightOf="@+id/left_button" app:layout_constraintRight_toLeftOf="@+id/right_button" app:layout_constraintTop_toTopOf="parent" /> <Button android:id="@+id/right_button" android:layout_width="80dp" android:layout_height="48dp" android:text="&gt;" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> 

作品。 关键是适当地设置右边,左边,顶边和底边约束,然后将宽度和高度设置为0dp并让它找出它自己的大小。

你可以使用高layout_weight属性。 下面你可以看到一个布局,其中ListView将所有可用空间与button放在底部:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="fill_parent" android:layout_height="fill_parent" tools:context=".ConfigurationActivity" android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="1000" /> <Button android:id="@+id/btnCreateNewRule" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Create New Rule" /> <Button android:id="@+id/btnConfigureOk" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Ok" /> </LinearLayout> 

对于那些与<LinearLayout...>相同的小问题,我也是这样做的:

指定android:layout_width="fill_parent"是非常重要的,它不适用于wrap_content

OTOH,你可以省略android:layout_weight = "0" ,这是不需要的。

我的代码基本上与https://stackoverflow.com/a/25781167/755804(Vivek Pandey)中的代码相同,

您应该避免嵌套2相对布局,因为相对布局总是使2绘制通过(对于任何其他types的布局1)。 嵌套它们时,它变得指数级。 你应该使用宽度为0和重量为1的线性布局来填充剩余空间。 这个答案是更好的performance和实践。 记住:只有在没有其他select时才使用相对布局。

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal"> <Button android:id="@+id/prev_button" android:layout_width="80dp" android:layout_height="wrap_content" android:text="&lt;" /> <TextView android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:ellipsize="end" android:singleLine="true" android:gravity="center" android:text="TextView" /> <Button android:id="@+id/next_button" android:layout_width="80dp" android:layout_height="wrap_content" android:text="&gt;" /> </LinearLayout> </LinearLayout> 

您可以使用将layout_widthlayout_width设置为0dp (按您想要填充剩余空间的方向)。 然后使用layout_weight使其填充剩余的空间。

使用Relativelayout来包装LinearLayout

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:round="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="fill_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text="&lt;"/> <TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:layout_weight = "1"/> <Button android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text="&gt;"/> </LinearLayout> </RelativeLayout>`