如何对齐两个相对布局

时间:2013-11-28 22:12:59

标签: android xml android-layout

好的,所以我有一个ListView,其中包含一些项目,每个项目都是自定义格式的,LinearLayout包含两个RelativeLayout项目。第一个(左侧)包含节目的标题和副标题,右侧包含节目开始的时间,或者如果超过该时间则显示“已失败”。

我希望正确的布局宽度包装它的内容和左侧布局宽度以填充剩余空间,仅此而已。当它填满剩余空间时,如果标题长于可用的标题,我希望它转到下一行。

现在我通过使左侧布局宽度静态来快速修复此问题,但我希望它能够自动更改。我怎样才能做到这一点?

这就是我的XML的样子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/listRoot"
    android:background="#fff">

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="260dp"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:id="@+id/mainInfoPan"
        >

        <!-- TITLE -->
        <TextView
            android:id="@+id/title"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="Space Holder"
            android:textColor="#040404"
            android:textStyle="bold"
            android:typeface="sans"
            android:textSize="18sp"
            android:layout_marginTop="1dip"
            android:layout_marginLeft="10dp" />

        <TextView
            android:id="@+id/subtitle"
            android:textStyle="bold"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_below="@+id/naslov"
            android:textColor="#ff777777"
            android:textSize="12sp"
            android:layout_marginLeft="10dp" />

    </RelativeLayout>

    <RelativeLayout
        android:layout_height="match_parent"
        android:layout_width="wrap_content"
        android:layout_toRightOf="@+id/mainInfoPan"
        android:padding="5dp">

        <TextView
            android:id="@+id/date"
            android:text="Space Holder"
            android:layout_alignParentRight="true"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textColor="#888"
            android:textSize="12sp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />

    </RelativeLayout>


</LinearLayout>

3 个答案:

答案 0 :(得分:1)

对于自动尺寸,您可以使用“weight”属性。 weight属性将剩余空间除以%,每个视图得到它的百分比

android:layout_height ="0dip"

android:layout_weight ="0.7"   => this view will get 70% of the available space

当你使用带有正确布局的“wrap_content”时会发生什么 和左边布局的“fill_parent”?

答案 1 :(得分:1)

让我们先摆脱那些RelativeLayout并添加一些加权。我稍微清理了你的代码。

如果你没有得到你想要的结果,请编辑你的问题,因为它还不清楚。

<?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="wrap_content"
    android:orientation="horizontal"
    android:id="@+id/listRoot"
    android:background="#fff">

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:padding="5dp"
        android:id="@+id/mainInfoPan"
        >

        <!-- TITLE -->
        <TextView
            android:id="@+id/title"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="Space Holder"
            android:textColor="#040404"
            android:textStyle="bold"
            android:typeface="sans"
            android:textSize="18sp"
            android:layout_marginTop="1dip"
            android:layout_marginLeft="10dp" />

        <TextView
            android:id="@+id/subtitle"
            android:textStyle="bold"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:layout_below="@+id/naslov"
            android:textColor="#ff777777"
            android:textSize="12sp"
            android:layout_marginLeft="10dp" />

    </LinearLayout>

    <LinearLayout
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:padding="5dp">

        <TextView
            android:id="@+id/date"
            android:text="Space Holder"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:textColor="#888"
            android:textSize="12sp" />

    </LinearLayout>


</LinearLayout>

答案 2 :(得分:1)

您可以使用单个RelativeLayout,没有子布局,将时间/错过的textview设置为

android:layout_alignParentRight="true"
android:layout_centerVertical="true"

标题上的用法:

android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_toStartOf="@+id/date"

和副标题:

android:layout_alignParentLeft="true"
android:layout_below="@+id/title"
android:layout_toStartOf="@+id/date"

这样,您就拥有一个平面层次结构,其中只有3个视图。您还可以使用固定宽度作为日期,因此所有项目都将对齐:

android:layout_width="@dimen/date_width"