如何在屏幕底部alignment视图?

这是我的布局代码;

<?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"> <TextView android:text="@string/welcome" android:id="@+id/TextView" android:layout_width="fill_parent" android:layout_height="wrap_content"> </TextView> <LinearLayout android:id="@+id/LinearLayout" android:orientation="horizontal" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="bottom"> <EditText android:id="@+id/EditText" android:layout_width="fill_parent" android:layout_height="wrap_content"> </EditText> <Button android:text="@string/label_submit_button" android:id="@+id/Button" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> </LinearLayout> </LinearLayout> 

这看起来像是在左边,我想要它看起来像在右边。

Android布局 - 实际(左)和期望(右)

显而易见的答案是将TextView设置为fill_parent的高度,但这不会使button或input字段留下空间。 基本上问题是,我希望提交button和文本条目是固定的高度在底部和文本视图来填充空间的其余部分,类似的水平线性布局我希望提交button来包装其内容和为文本条目填充其余的空间。

如果线性布局中的第一个项目被告知fill_parent,那么它完全是这样做的,不会留下其他项目的空间,我怎样才能得到一个线性布局中的第一个项目,以填补除了剩下的布局中的项目?

编辑:

相对布局确实是答案 – 谢谢!

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="@string/welcome" android:id="@+id/TextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true"> </TextView> <RelativeLayout android:id="@+id/InnerRelativeLayout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" > <Button android:text="@string/label_submit_button" android:id="@+id/Button" android:layout_alignParentRight="true" android:layout_width="wrap_content" android:layout_height="wrap_content"> </Button> <EditText android:id="@+id/EditText" android:layout_width="fill_parent" android:layout_toLeftOf="@id/Button" android:layout_height="wrap_content"> </EditText> </RelativeLayout> </RelativeLayout> 

我想你应该尝试一个相对的布局 。
如果你有一个填充整个屏幕的相对布局,你应该可以使用android:layout_alignParentBottom将button移动到屏幕的底部。

如果底部的视图没有以相对布局显示,那么上面的布局可能会占用所有的空间。 在这种情况下,您可以将视图放置在底部,首先放置在布局文件中,然后使用android:layout_above将视图的其余部分放在视图的android:layout_above 。 这使得底部视图可以占用尽可能多的空间,其余的布局可以填充屏幕的其余部分。

ScrollView这不起作用,因为RelativeLayout会重叠页面底部的ScrollView

我使用dynamic拉伸的FrameLayout来修复它:

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="match_parent" android:layout_width="match_parent" android:fillViewport="true"> <LinearLayout android:id="@+id/LinearLayout01" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical"> <!-- content goes here --> <!-- stretching frame layout, using layout_weight --> <FrameLayout android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"> </FrameLayout> <!-- content fixated to the bottom of the screen --> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <!-- your bottom content --> </LinearLayout> </LinearLayout> </ScrollView> 

您可以通过在线性布局中嵌套相对布局来保持您的初始线性布局:

 <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="welcome" android:id="@+id/TextView" android:layout_width="fill_parent" android:layout_height="wrap_content"> </TextView> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:text="submit" android:id="@+id/Button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_alignParentRight="true"> </Button> <EditText android:id="@+id/EditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toLeftOf="@id/Button" android:layout_alignParentBottom="true"> </EditText> </RelativeLayout> </LinearLayout> 

上面的答案(Janusz)是非常正确的,但我个人觉得不会100%使用RelativeLayouts来舒适,所以我更喜欢引入一个“填充”,即空的TextView,如下所示:

 <!-- filler --> <TextView android:layout_height="0dip" android:layout_width="fill_parent" android:layout_weight="1" /> 

在应该在屏幕底部的元素之前。

这也适用。

 <LinearLayout android:id="@+id/linearLayout4" android:layout_width="wrap_content" android:layout_height="fill_parent" android:layout_below="@+id/linearLayout3" android:layout_centerHorizontal="true" android:orientation="horizontal" android:gravity="bottom" android:layout_alignParentBottom="true" android:layout_marginTop="20dp" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> 

gravity =“bottom”将LinearLayout元素浮动到底部

你也可以用LinearLayout或者ScrollView来做到这一点。 有时候更容易实现一个RelativeLayout。 您需要做的唯一事情就是要alignment到屏幕底部的视图之前添加以下视图:

 <View android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" /> 

这将创build一个空视图,填充空白区域并将下一个视图推送到屏幕底部。

你甚至不需要将第二个relative布局嵌套在第一个布局中。 只需在ButtonEditText中使用android:layout_alignParentBottom="true"

继续Timores的优雅的解决scheme,我发现以下创build垂直LinearLayout垂直填充和水平LinearLayout水平填充:

 <Space android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> 

如果你不想做出很多改变,那么你可以把:

 android:layout_weight="1" 

对于TextView,ID为@+id/TextView ie

 <TextView android:text="@string/welcome" android:id="@+id/TextView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1"> </TextView> 

创buildHEADER和FOOTER,这里是一个例子

[布局XML]

 <RelativeLayout 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" android:background="@color/backgroundcolor" tools:context=".MainActivity"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="40dp" android:background="#FF0000"> </RelativeLayout> <RelativeLayout android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentBottom="true" android:background="#FFFF00"> </RelativeLayout> </RelativeLayout> 

[截图]

在这里输入图像描述

希望这是有帮助的。 谢谢!!

使用下面的代码alignmentbutton,使其工作

  <?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" > <Button android:id="@+id/btn_back" android:layout_width="100dp" android:layout_height="80dp" android:text="Back" /> <TextView android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.97" android:gravity="center" android:text="Payment Page" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" > <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Submit"/> </LinearLayout> </LinearLayout> 

在你的<RelativeLayout>使用android:layout_alignParentBottom="true"

这一定会有所帮助。

如果你有这样的层次结构:

 <ScrollView> |-- <RelativeLayout> |-- <LinearLayout> 

首先,将android:fillViewport="true"应用于ScrollView ,然后将android:layout_alignParentBottom="true"应用于LinearLayout

这对我完美的工作。

 <ScrollView android:layout_height="match_parent" android:layout_width="match_parent" android:scrollbars="none" android:fillViewport="true"> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:id="@+id/linearLayoutHorizontal" android:layout_alignParentBottom="true"> </LinearLayout> </RelativeLayout> </ScrollView> 

你可以给你的顶级子视图(TextView @ + id / TextView )一个属性: android:layout_weight="1"

这将迫使其下面的所有其他元素。

1.在您的根布局中使用ConstraintLayout

然后设置app:layout_constraintBottom_toBottomOf="parent"让屏幕底部的布局

 <LinearLayout android:id="@+id/LinearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent"> </LinearLayout> 

2.在您的根布局中使用FrameLayout

只需在布局中设置android:layout_gravity="bottom"

 <LinearLayout android:id="@+id/LinearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:orientation="horizontal"> </LinearLayout> 

3.在您的根布局中使用LinearLayoutandroid:orientation="vertical"

(1)在布局的顶部设置布局android:layout_weight="1"

 <TextView android:id="@+id/TextView" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1" android:text="welcome" /> 

(2)为android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"设置子版本LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="bottom"

主要的属性是ndroid:gravity="bottom" ,让子View在Layout的底部。

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

4.在根布局中使用RelativeLayout

并设置android:layout_alignParentBottom="true"让屏幕底部的布局

 <LinearLayout android:id="@+id/LinearLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal"> </LinearLayout> 

OUTPUT

在这里输入图像描述

我使用Janusz发布的解决scheme,但是由于我的布局的顶部是一个ScrollView,所以添加了填充到最后一个视图。 ScrollView将随着内容的增长而部分隐藏。 在最后一个视图上使用android:paddingBottom有助于显示ScrollView中的所有内容。

这也可以通过线性布局来完成。只需要在上面的布局中提供Height = 0dp和weight = 1,而在底部只需要提供height = wrap内容和没有权重。 它所做的是为布局(包含您的编辑文本和button的布局)提供换行内容,然后拥有重量的布局将占用布局的其余部分。 我偶然发现了这个

对于这种情况总是使用RelativeLayouts。 LinearLayout不适用于这种用法。

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/db1_root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!-- Place your layout here --> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_gravity="bottom" android:orientation="horizontal" android:paddingLeft="20dp" android:paddingRight="20dp" > <Button android:id="@+id/setup_macroSavebtn" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Save" /> <Button android:id="@+id/setup_macroCancelbtn" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:text="Cancel" /> </LinearLayout> </RelativeLayout>