如何在屏幕底部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>
这看起来像是在左边,我想要它看起来像在右边。
显而易见的答案是将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>
你也可以用LinearLayout或者ScrollView来做到这一点。 有时候更容易实现一个RelativeLayout。 您需要做的唯一事情就是在要alignment到屏幕底部的视图之前添加以下视图:
<View android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" />
这将创build一个空视图,填充空白区域并将下一个视图推送到屏幕底部。
你甚至不需要将第二个relative
布局嵌套在第一个布局中。 只需在Button和EditText中使用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.在您的根布局中使用LinearLayout
( android: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>