3

我有这个布局片段。为什么两个无线电组不对齐?我已经尝试过在RadioGroup.

我假设它marginLeft是从单选按钮本身的左边缘测量的,并且marginRight是从最长的单选按钮标题的右侧测量的。文件在这方面并不清楚。

请注意,我已经删除了所有与布局无关的行(例如文本)。所有文本大小均为15sp.

    <RelativeLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        <ImageView
                android:id="@+id/lengthImage"
                android:layout_centerVertical="true"
                android:paddingLeft="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        <TextView
                android:text="@string/length"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@id/lengthImage"
                android:paddingLeft="15dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        <RadioGroup
                android:orientation="vertical"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_marginLeft="200dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            <RadioButton
                    android:id="@+id/lengthMetres"
                    android:paddingRight="20dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

            <RadioButton
                    android:id="@+id/lengthFeet"
                    android:paddingRight="20dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>
        </RadioGroup>

    </RelativeLayout>

    <RelativeLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

        <ImageView android:id="@+id/distanceImage"
                android:layout_centerVertical="true"
                android:paddingLeft="10dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        <TextView
                android:text="@string/distance"
                android:layout_centerVertical="true"
                android:layout_toRightOf="@id/distanceImage"
                android:paddingLeft="15dp"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>

        <RadioGroup
                android:orientation="vertical"
                android:layout_marginLeft="200dp"
                android:layout_alignParentRight="true"
                android:layout_centerVertical="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content">

            <RadioButton
                    android:id="@+id/distanceMile"
                    android:paddingRight="20dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

            <RadioButton
                    android:id="@+id/distanceKM"
                    android:paddingRight="20dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

            <RadioButton
                    android:id="@+id/distanceNM"
                    android:paddingRight="20dp"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"/>

        </RadioGroup>

    </RelativeLayout>

在此处输入图像描述

[编辑]

解决方案。

将 RadioGroup 宽度硬编码为 100dp 效果很好。我讨厌这样做。我敢打赌,分辨率、密度和方向的组合会打破这一点!

4

2 回答 2

7

您可以完全构建您的布局,而无需对100dp.

通过使用android:layout_alignLeft,您可以解决您android:layout_alignBottomandroid:layout_alignTop问题RadioGroups

但是,您将不得不稍微更改 XML,因为它只有在两者RadioGroups都在同一个RelativeLayout.

这是您的所有调整代码:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <RadioGroup
        android:id="@+id/radio_group_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="200dp"
        android:orientation="vertical" >

        <RadioButton
            android:id="@+id/lengthMetres"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="metres" />

        <RadioButton
            android:id="@+id/lengthFeet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="feet" />
    </RadioGroup>

    <ImageView
        android:id="@+id/lengthImage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignBottom="@id/radio_group_1"
        android:layout_alignTop="@id/radio_group_1"
        android:layout_centerVertical="true"
        android:paddingLeft="10dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/radio_group_1"
        android:layout_alignTop="@id/radio_group_1"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/lengthImage"
        android:gravity="center"
        android:paddingLeft="15dp"
        android:text="@string/length" />

    <RadioGroup
        android:id="@+id/radio_group_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@id/radio_group_1"
        android:layout_below="@id/radio_group_1"
        android:orientation="vertical" >

        <RadioButton
            android:id="@+id/distanceMile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="mile" />

        <RadioButton
            android:id="@+id/distanceKM"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="km" />

        <RadioButton
            android:id="@+id/distanceNM"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="NM" />
    </RadioGroup>

    <ImageView
        android:id="@+id/lengthImage"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_alignBottom="@id/radio_group_2"
        android:layout_alignTop="@id/radio_group_2"
        android:layout_centerVertical="true"
        android:paddingLeft="10dp"
        android:src="@drawable/ic_launcher" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@id/radio_group_2"
        android:layout_alignTop="@id/radio_group_2"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/lengthImage"
        android:gravity="center"
        android:paddingLeft="15dp"
        android:text="@string/length" />
</RelativeLayout>

这就是它的外观:

对齐的无线电组

我认为,这个解决方案在你的具体情况下是适用的,但是对于某种通用的解决方案,当你有两个以上的 RadioGroup 时,这个解决方案必须得到改进。

希望这种方法对您有用:)

于 2013-04-07T21:46:35.773 回答
1

看起来您应该为 RadioGroups 使用android:layout_width="match_parent"and android:layout_marginLeft="200dp"(不是 android:marginLeft)。

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/lengthImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:paddingLeft="10dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/lengthImage"
        android:paddingLeft="15dp"
        android:text="length" />

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="200dp"
        android:orientation="vertical" >

        <RadioButton
            android:id="@+id/lengthMetres"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="meters" />

        <RadioButton
            android:id="@+id/lengthFeet"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="feets" />
    </RadioGroup>
</RelativeLayout>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

    <ImageView
        android:id="@+id/distanceImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:paddingLeft="10dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toRightOf="@id/distanceImage"
        android:paddingLeft="15dp"
        android:text="distance" />

    <RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="200dp"
        android:orientation="vertical" >

        <RadioButton
            android:id="@+id/distanceMile"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="left"
            android:paddingRight="20dp"
            android:text="foo" />

        <RadioButton
            android:id="@+id/distanceKM"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="boo" />

        <RadioButton
            android:id="@+id/distanceNM"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingRight="20dp"
            android:text="moo" />
    </RadioGroup>
</RelativeLayout>
于 2013-04-07T19:14:34.667 回答