Android:在布局中正确定位按钮

时间:2013-11-15 08:12:38

标签: android android-layout

我有以下布局:

enter image description here

<LinearLayout //container, should adjust height based on CONTENT view height
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:clickable="false"
        android:padding="20dp">
     <RelativeLayout //this is the CONTENT view height
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="5">....</RelativeLayout>
...
    <RelativeLayout //this is the button layout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2">

          <Button android:layout_width="40sp" android:layout_height="40sp"/>
          <Button android:layout_width="40sp" android:layout_height="40sp"/>
    </RelativeLayout>

</LinearLayout>

我希望调整容器的高度(LinearLayout)以包含RelativeLayout中的所有视图(如左图所示,我们称之为 CONTAINER

然后,RelativeLayout中有两个按钮(如右图所示)。我需要相应地在RelativeLayot的顶部和底部边框上对齐它们。真正重要的是,按钮容器的高度应与 CONTAINER 的高度相同(应对应)。

问题是,如果我尝试使用按钮的android:layout_alignParentBottom="true"android:layout_alignParentTop="true"属性,它们将拉伸容器高度,它将占据整个屏幕高度。

那么,我应该用什么魔法来做这个伎俩? :)

3 个答案:

答案 0 :(得分:1)

尝试将右侧相对布局的顶部和底部对齐到左侧。 尝试这样的事情:

<RelativeLayout //container, should adjust height based on CONTENT view height
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:baselineAligned="false"
        android:clickable="false"
        android:padding="20dp">
     <RelativeLayout //this is the CONTENT view height
            android:id="@+id/contentRL"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="5"
            android:layout_alignParentLeft="true">....</RelativeLayout>
...
    <RelativeLayout //this is the button layout
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:layout_alignTop="@id/contentRL"
            android:layout_alignBottom="@id/contentRL"
            android:layout_alignParentRight="true">

          <Button android:layout_width="40sp" 
            android:layout_height="40sp"
            android:layout_alignParentTop="true"/>
          <Button android:layout_width="40sp"
            android:layout_height="40sp"
            android:layout_alignParentBottom="true"/>
</RelativeLayout>

答案 1 :(得分:0)

使用此

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:baselineAligned="false"
        android:clickable="false"
        android:padding="20dp">
     <RelativeLayout 
            android:layout_width="wrap_content"
            android:layout_height="fill_parent"
            android:layout_weight="5"></RelativeLayout>

    <RelativeLayout 
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="2">

          <Button android:layout_width="wrap_content" 
              android:layout_height="wrap_content"
              android:layout_alignParentTop="true"/>
          <Button android:layout_width="wrap_content"
               android:layout_height="wrap_content"
               android:layout_alignParentBottom="true"/>
    </RelativeLayout>

</LinearLayout>

答案 2 :(得分:0)

好的,基于上面Damien R.提供的提示,我通过以下方式成功完成了任务:

  • 使用RelativeLayout作为参数layout_width="wrap_content"layout_height="wrap_content"
  • 的根目录
  • 使用LinearLayout作为容器RelativeLayout周围的“包装器”。这是因为我需要使用layout_weight属性来布置这些容器。
  • RelativeLayout layout_height应为fill_parent。无需在android:layout_alignBottom="@id/..."属性中使用android:layout_alignBottom="@id/..."RelativeLayout。这仅在RelativeLayout是另一个View的孩子RelativeLayout时才有效,而事实并非如此,因为我需要使用LinearLayout的权重

代码是:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:baselineAligned="false"
    android:clickable="false"
    android:padding="10dp">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/ticketbackground"
        android:id="@+id/ticket_layout"
        >

        <RelativeLayout
            android:id="@+id/contentRL"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="5"
            android:layout_alignParentLeft="true">
        </RelativeLayout>

<!--second column-->
        <RelativeLayout
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="3">
              ...
        </RelativeLayout>
<!--third column with buttons-->
        <RelativeLayout
            android:id="@+id/sdfsdf"
            android:layout_width="0dp"
            android:layout_height="fill_parent"
            android:layout_weight="2">

            <Button...
                android:layout_alignParentTop="true" />
            <Button...
                android:layout_alignParentBottom="true" />
        </RelativeLayout>
    </LinearLayout>
</RelativeLayout>