如何在Android LinearLayout中底部对齐我的按钮栏

时间:2013-08-26 16:18:35

标签: android android-layout

我正在使用一个主要细节应用程序,我的activity_twopane在详细信息窗格的底部有一个按钮栏(我想放置它)。我可以把它放在碎片细节之下,但无论如何我都无法让它与底部对齐 我使用android:layout_weight="1"在单窗格模式下工作正常,但即使有使用嵌套权重的警告,它也无法在双窗格模式下工作。
这就是现在的样子:
Current layout
这是我到目前为止的布局xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:baselineAligned="false"
    android:divider="?android:attr/dividerHorizontal"
    android:orientation="horizontal"
    android:showDividers="middle"
    tools:context=".DocumentoListActivity" >

    <fragment
        android:id="@+id/documento_list"
        android:name="br.com.DocumentoListFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout="@android:layout/list_content" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content" 
        android:layout_weight="3"
        android:orientation="vertical">

        <FrameLayout
            android:id="@+id/documento_detail_container"
            android:layout_width="match_parent"
            android:layout_height="fill_parent" />

        <LinearLayout
            android:id="@+id/documento_twopane_buttons"
            style="android:attr/buttonBarStyle"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/documento_twopane_buttonBaixar"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button 1" />

            <Button
                android:id="@+id/documento_twopane_buttonAssinar"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Button 2" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>  

由于我的按钮栏位于LinearLayout内,我无法在其中使用RelativeLayout with android:layout_alignParentBottom="true"

问题

这对LinearLayout是可行的还是我必须更改所有内容并将其放入RelativeLayout ??

3 个答案:

答案 0 :(得分:1)

你可以在这里使用RelativeLayout,但是这样使用嵌套布局并不是什么大问题。它只会膨胀一次。您的详细信息LinearLayout应如下所示:

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="wrap_content" 
    android:layout_weight="3"
    android:orientation="vertical">

    <FrameLayout
        android:id="@+id/documento_detail_container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:weight="1" />

    <LinearLayout
        android:id="@+id/documento_twopane_buttons"
        style="android:attr/buttonBarStyle"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <Button
            android:id="@+id/documento_twopane_buttonBaixar"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button 1" />

        <Button
            android:id="@+id/documento_twopane_buttonAssinar"
            style="?android:attr/buttonBarButtonStyle"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button 2" />
    </LinearLayout>
</LinearLayout>

这里要注意的重要一点是,您不必对android:weight中的所有孩子使用LinearLayout。如果您有2个孩子,并将主要权重设置为1,将0作为相应的长度或宽度轴,则可以将wrap_content与另一个孩子一起使用,并且只占用所需的空间

答案 1 :(得分:1)

将按钮包裹在另一个布局中的线性布局,高度设置为 match_parent

将线性布局(包含按钮)的高度设置为 match_parent ,并将重力设置为底部

这可以按照您的意愿使用

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:layout_marginLeft="16dp"
 android:layout_marginRight="16dp"
 android:baselineAligned="false"
 android:orientation="horizontal"
 android:showDividers="middle"
 tools:context=".DocumentoListActivity" >

<fragment
android:id="@+id/documento_list"
android:name="br.com.DocumentoListFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:layout="@android:layout/list_content" />

<!-- Set this layout height to match_parent -->
<LinearLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="3"
android:orientation="vertical" >

 <!-- Set this layout height to wrap_content -->
<FrameLayout
    android:id="@+id/documento_detail_container"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

 <!-- Set this layout height to match_parent -->
<LinearLayout
    android:id="@+id/documento_twopane_buttons"
    style="android:attr/buttonBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:orientation="horizontal" >

<!-- Set this layout height to match_parent and gravity to bottom -->
<LinearLayout
    android:id="@+id/documento_twopane_buttons1"
    style="android:attr/buttonBarStyle"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_gravity="bottom"
    android:baselineAligned="false"
    android:gravity="bottom"
    android:orientation="horizontal" >

    <Button
        android:id="@+id/documento_twopane_buttonBaixar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 1" />

    <Button
        android:id="@+id/documento_twopane_buttonAssinar"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 2" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>

答案 2 :(得分:0)

尽管@ twntee的答案似乎工作得很好,如果右侧窗格上的文字太长,它最终会出现在按钮顶部,使它们无法访问。所以我不得不做几个开关。所以现在我必须使用嵌套权重,但至少不需要那些嵌套的LinearLayouts

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginLeft="16dp"
    android:layout_marginRight="16dp"
    android:baselineAligned="false"
    android:orientation="horizontal"
    android:showDividers="middle"
    tools:context=".DocumentoListActivity" >

    <fragment
        android:id="@+id/documento_list"
        android:name="br.com.DocumentoListFragment"
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        tools:layout="@android:layout/list_content" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="3"
        android:orientation="vertical" >

        <FrameLayout
            android:id="@+id/documento_detail_container"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            tools:context=".DocumentoDetailActivity"
            tools:ignore="MergeRootFrame,NestedWeights" />

        <LinearLayout
            android:id="@+id/documento_twopane_buttons"
            style="android:attr/buttonBarStyle"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="bottom"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/documento_twopane_buttonOne"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/button_one" />

            <Button
                android:id="@+id/documento_twopane_buttonTwo"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/button_two" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>