Управление макетом внутри горизонтальной радиогруппы - PullRequest
17 голосов
/ 29 декабря 2010

Я использую TableLayout с TableRows в качестве моей основной деятельности.

Внутри TableLayout находится группа радио, содержащая 2 кнопки Radio внутри действия (группа Radio находится внутри строки таблицы).Я хочу, чтобы можно было выровнять крайнюю правую радиокнопку по правому краю экрана, поэтому «разрыв» находится между левой радиокнопкой и правой кнопкой (вместо правого радиокнопки).то есть

Таким образом, вместо
|(x) (x) разрыв |
У меня будет
| (x) разрыв (x) |

где (x) - кнопки радио и |являются краями экрана

Я могу использовать гравитацию (center_horizontal), чтобы поместить обе кнопки посередине (т.е. | промежуток (x) (x) промежуток |), однако я не могуразделите их так, как я хочу, как говорилось ранее

Ответы [ 4 ]

32 голосов
/ 30 апреля 2011

Все, что вам нужно, чтобы равномерно распределить произвольное количество кнопок по горизонтали по экрану:

  1. Радиогруппа должна иметь android:orientation="horizontal" & android:layout_width="fill_parent"
  2. Каждый переключатель должен иметь android:layout_weight="1", кроме самая правая кнопка (чтобы сделать это выстроиться на правом краю экран)!

Landscape screenshot

Мне потребовались часы, чтобы понять.

Вот пример кода с бонусом в виде двух текстовых меток и правого и левого краев экрана для приложения обследования.

<RadioGroup
    android:id="@+id/radio_group"
    android:orientation="horizontal"
    android:layout_below="@id/question" 
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:visibility="gone"
>
    <RadioButton
        android:id="@+id/strong_disagree_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="1"
    />
    <RadioButton
        android:id="@+id/disagree_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/disagree"
    />
    <RadioButton
        android:id="@+id/neutral_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/neutral"
    />
    <RadioButton
        android:id="@+id/agree_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="@string/agree"
    />
    <RadioButton
        android:id="@+id/strong_agree_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="5"
    />
</RadioGroup>
<TextView
    android:id="@+id/disagree_label"
    android:text="@string/strongly_disagree_txt"
    android:layout_below="@id/radio_group" 
    style="@style/TextAppearance"
    android:visibility="gone"
    />
<TextView
    android:id="@+id/agree_label"
    android:text="@string/strongly_agree_txt"
    android:layout_below="@id/radio_group" 
    android:layout_alignParentRight="true" 
    style="@style/TextAppearance"
    android:layout_width="wrap_content"
    android:visibility="gone"
    />
9 голосов
/ 20 января 2011

Нашел мое решение.Сочетание веса и силы тяжести и удаление полей.Радиогруппа может иметь layout_width = "fill_parent".У каждой радиокнопки должно быть layout_weight = "1", но для каждой радиокнопки необходимо указывать layout_width, чтобы переопределить значение по умолчанию "37", которое, я полагаю, является шириной изображения радиокнопки по умолчанию.кнопка должна иметь:

                android:layout_weight="1"
            android:layout_gravity="center|left"

Последняя кнопка должна иметь:

            android:layout_gravity="center|right"

Примечание: для всех кнопок установлен layout_gravioty, но нет настройки layout_weight для самой правой кнопки!

0 голосов
/ 29 января 2013

Если я правильно понял ваш вопрос, вы также можете попробовать следующий код в RadioGroup:

<ToggleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

<View
    android:id="@+id/view1"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1" />

<ToggleButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
0 голосов
/ 19 января 2011

Вы когда-нибудь находили решение для этого?Мое промежуточное решение может помочь, но это не полная картина для меня.Я смог сделать это, установив определенную ширину, но это не позволяет изменять размеры представления в соответствии с шириной экрана:

    <RelativeLayout  
    android:id="@+id/overall_layout"
    android:layout_width="290dp" android:layout_height="wrap_content">

    <RadioGroup android:id="@+id/overall"
        android:layout_width="fill_parent" android:layout_height="wrap_content"
        android:orientation="horizontal">
        <RadioButton android:id="@+id/overall_1" android:tag="1"
            android:button="@drawable/radio_1"
            android:layout_width="50dp"
            android:layout_marginRight="10dp"
            android:layout_height="wrap_content"></RadioButton>
        <RadioButton android:id="@+id/overall_2" android:tag="2"
            android:button="@drawable/radio_2"
            android:layout_width="50dp"
            android:layout_marginRight="10dp"
            android:layout_height="wrap_content"></RadioButton>
        <RadioButton android:id="@+id/overall_3" android:tag="3"
            android:button="@drawable/radio_3"
            android:layout_width="50dp"
            android:layout_marginRight="10dp"
            android:layout_height="wrap_content"></RadioButton>
        <RadioButton android:id="@+id/overall_4" android:tag="4"
            android:button="@drawable/radio_4"
            android:layout_width="50dp"
            android:layout_marginRight="10dp"
            android:layout_height="wrap_content"></RadioButton>
        <RadioButton android:id="@+id/overall_5" android:tag="5"
            android:button="@drawable/radio_5"
            android:layout_width="50dp"
            android:layout_height="wrap_content"></RadioButton>
    </RadioGroup>
    <TextView android:text="left" android:id="@+id/left"
        android:layout_below="@id/overall"
        android:layout_alignParentLeft="true"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    <TextView android:text="right" android:id="@+id/right"
        android:layout_below="@id/overall"
        android:layout_alignParentRight="true"
        android:layout_width="wrap_content" android:layout_height="wrap_content"></TextView>
    </RelativeLayout>

Обратите внимание, что на последней кнопке нет поля.

Я пытаюсь использовать 5 пользовательских кнопок в группе радиостанций, причем 1-я выровнена по левому краю, а последняя - по правому краю.Кнопки имеют ширину ровно 50 пикселей, и я не хочу, чтобы текст был связан с кнопками по отдельности.2 текста ниже приведены слева и справа в относительной компоновке.Использование «layout_gravity» не имеет никакого эффекта, а «layout_weight» добавляет отступ справа от каждой кнопки, что приводит к тому, что крайняя правая кнопка больше не является оправданной.

...