android - 在屏幕底部如何对齐?

  显示原文与译文双语对照的内容

这是我的布局代码;


<?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 Layout - Actual (Left) and Desired (Right)

显而易见的答案设置textviewfill_parent身高但这不会导致房间左边的按钮或输入字段。 本质上的问题是,我要提交按钮和文本输入是一个固定的高度和文本视图底部填充剩余的空间,同样在我想要的水平线性布局submit按钮来包装它的内容和文本输入来填补剩余的空间。

如果第一项的线性布局告诉确切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 将按钮移动到屏幕底部。

如果底部的视图没有显示在相对布局中,那么上面的布局可能占据所有空间。 在这种情况下,你可以将应该位于底部的视图放在你的布局文件中,并将布局的其余部分放置在视图的上方。 这使得底部视图可以占用尽可能多的空间,并且布局的其余部分可以填充屏幕的其余部分。

在ScrollView中,这不起作用,因为正字法会重叠页面底部的ScrollView 。

我使用动态拉伸FrameLayout修复了它:


<ScrollView 
 xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_height="fill_parent" 
 android:layout_width="fill_parent"
 android:fillViewport="true">
 <LinearLayout 
 android:id="@+id/LinearLayout01"
 android:layout_width="fill_parent" 
 android:layout_height="fill_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="fill_parent" 
 android:layout_height="fill_parent"
 android:layout_weight="1">
 </FrameLayout>

 <!-- content fixated to the bottom of the screen -->
 <LinearLayout 
 android:layout_width="fill_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 ) 以上答案是非常正确的,但是我personnally不觉得 100% confortable 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" to float LinearLayout elements to bottom

你可以用一个LinearLayout或者ScrollView来做这个。 有时实现一个字谜更容易。 你唯一需要做的就是添加以下观点视图之前你想要对齐到屏幕底部的:


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

这将创建一个空视图,填充空白空间并将下一个视图推到屏幕底部。

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

如果你不想做很多更改,那么你可以直接:


android:layout_weight="1"

对于具有 @+id/TextView i.e 身份的TextView


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

使用下面的代码对齐按钮来bottem的工作


 <?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>

...