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出现..
如果子项的属性分别正确定义了它们的left
和right
值或者是bottom
值,则RelativeLayout
将忽略其子android:layout_width
android:layout_height
或android: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
,如果您有更复杂的布局,您仍然需要定义这些值。