在相对布局中设置视图高度

时间:2012-06-18 10:00:02

标签: android android-layout relativelayout

我有这样的布局,我想在视图上方显示标签,然后在下面重复。

这是我的代码......

<RelativeLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/speedLbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:text="@string/speed"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <View
        android:id="@+id/speedGraph"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="4dp"
        android:layout_below="@+id/speedLbl"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@color/blueColour" />

    <TextView
        android:id="@+id/distanceLbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_below="@+id/speedGraph"
        android:text="@string/distance"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <View
        android:id="@+id/distanceGraph"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/distanceLbl"
        android:layout_marginBottom="4dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@color/blueColour" />

</RelativeLayout>

问题是我不想为两个视图设置高度,因为我希望它们根据屏幕大小动态更改。我尝试使用layout_weight,但它不喜欢它嵌套在另一个内部的事实。

任何人都可以看到这个问题的另一种解决方案吗?

2 个答案:

答案 0 :(得分:1)

你可以用一个小技巧来避免双重权重问题。您可以在父View的垂直中心设置一个空的RelativeLayout,并将这两个组放在View的上方和下方,如下所示:

<RelativeLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:orientation="vertical" >

    <View android:id="@+id/anchor" 
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_centerVertical="true/>

    <TextView
        android:id="@+id/speedLbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:text="@string/speed"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <View
        android:id="@+id/speedGraph"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_marginBottom="4dp"
        android:layout_below="@id/speedLbl"
        android:layout_above="@id/anchor"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@color/blueColour" />

    <TextView
        android:id="@+id/distanceLbl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_below="@id/anchor"
        android:text="@string/distance"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <View
        android:id="@+id/distanceGraph"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:layout_below="@id/distanceLbl"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="4dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:background="@color/blueColour" />

</RelativeLayout>

此外,只有在您首次声明该ID时才应使用@+id/...表示法,在下次出现时应使用@id/...

答案 1 :(得分:0)

您可以通过layout_weight实现动态屏幕尺寸。但在此之前,您只需尝试layout_weight到线性布局,并为视图和文本视图提供适当的权重。它几乎解决了你的问题。不要使用相对布局和重量。重量在相对布局中不起作用。