Android:如何alignment上面的底部和listviewbutton?

我想在列表视图的底部有一个button。

如果我使用relativeLayout / FrameLayout,它会alignment,但listView会下降到很低的程度。

(在底部的button后面)

在这里输入图像说明

的FrameLayout:

<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="wrap_content" /> <FrameLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentBottom="true"> <Button android:id="@+id/btnButton" android:text="Hello" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> </FrameLayout> </FrameLayout> 

RelativeLayout的:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/listview" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true"> <Button android:id="@+id/btnButton" android:text="Hello" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" /> </RelativeLayout> </RelativeLayout> 

以上两个代码只能像第一个图像一样工作。 我想要的是第二个图像。

任何人都可以帮忙吗?

谢谢。

FrameLayout的目的是将事物叠加在一起。 这不是你想要的。

在您的RelativeLayout示例中,将ListView的高度和宽度设置为MATCH_PARENT这将使其占用与其父级相同的空间量,从而占用页面上的所有空间(并覆盖button)。

尝试像这样:

 <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:layout_width="match_parent" android:layout_height="0dip" android:layout_weight="1"/> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_weight="0"/> </LinearLayout> 

layout_weight决定了如何使用额外的空间。 Button不想超出它所需的空间,所以它的权重为0. ListView想占用所有额外的空间,所以它的权重为1。

你可以使用RelativeLayout来完成类似的事情,但如果只是这两个项目,我认为LinearLayout更简单。

我需要在底部并排两个button。 我使用了水平线性布局,但是为button的线性布局分配android:layout_height="0dp"android:layout_weight="0"不起作用。 只为button的线性布局分配android:layout_height="wrap_content" 。 这是我的工作布局:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView1" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/new_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="New" /> <Button android:id="@+id/suggest_button" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Suggest" /> </LinearLayout> </LinearLayout> 
  <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#ffffff" > <ListView android:id="@+id/ListView01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"> </ListView> <FrameLayout android:id="@+id/FrameLayout01" android:layout_width="fill_parent" android:layout_height="wrap_content"> <Button android:id="@+id/Button01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="button" android:layout_gravity="center_horizontal"> </Button> </FrameLayout> </LinearLayout> 

这是您正在寻找的devise。 尝试一下。

我正在使用Xamarin Android,而且我的要求与上面的William T. Mallard完全相同,即带有2个并排button的ListView。 解决方法是这个答案在Xamarin Studio中不起作用 – 当我将ListView的高度设置为“0dp”时,ListView完全消失。

我工作的Xamarin Android代码如下:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ListView android:id="@+id/ListView1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:layout_above="@+id/ButtonsLinearLayout" /> <LinearLayout android:id="@id/ButtonsLinearLayout" android:layout_height="wrap_content" android:layout_width="fill_parent" android:orientation="horizontal" android:layout_alignParentBottom="true"> <Button android:id="@+id/Button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> <Button android:id="@+id/Button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" /> </LinearLayout> </RelativeLayout> 

我将ButtonsLinearLayoutalignment到屏幕的底部,并将ListView设置为ButtonsLinearLayout的上方。

@jclova可以做的另一件事是在相对布局中使用layout-below=@+id/listviewid

在你的相对布局高度的ListView是match_parent这是fill_parent(对于2.1和更旧),所以最好的解决scheme是,如果你想使用相对布局,然后首先声明你的button,然后你的列表视图,使列表视图位置如上面的buttonID,如果你想要的button总是在底部,然后使其alignParentBottom ..片段是

 <RelativeLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/rl1"><Button android:layout_width="MATCH_PARENT" android:layout_height="WRAP_CONTENT" /><ListView android:layout_width="MATCH_PARENT" android:layout_height="0" android:layout_above="@id/listview"/></RelativeLayout> 

这可以防止您的列表视图占据整个地方,并使您的button出现..

如果子项的属性分别正确定义了它们的leftright值或者是bottom值,则RelativeLayout将忽略其子android:layout_width android:layout_heightandroid:layout_height属性。

要在正确的图像上显示结果,显示button上方的列表,您的布局应如下所示:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@android:id/list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@android:id/button1" android:layout_alignParentTop="true"/> <Button android:id="@android:id/button1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="@android:string/ok"/> </RelativeLayout> 

关键是在android:layout_alignParentTop定义android:layout_alignParentTop (定义top值)和android:layout_above (定义bottom值)。 这样, RelativeLayout将忽略android:layout_height="match_parent"RecyclerView将被放置在Button上方。

此外,请确保您查看android:layout_alignWithParentIfMissing ,如果您有更复杂的布局,您仍然需要定义这些值。