Android: выравнивание радиокнопок 2 x 2 в одной радиогруппе

У меня есть 4 radio buttons, и я могу выровнять их только по вертикали и по горизонтали следующим образом:

A B C D 

а также

A
B
C
D

но я хочу такое выравнивание:

A B
C D

есть ли какой-нибудь способ сделать это? Я не могу найти правильных руководств или примеров.


person Drenyl    schedule 29.01.2016    source источник
comment
Проверьте этот stackoverflow.com/a/2383978/4494555.   -  person Jas    schedule 29.01.2016


Ответы (4)


Используйте LinearLayout внутри Radiogroup Вот так:

<RadioGroup
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/radioGroup">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New RadioButton"

            android:layout_marginLeft="5dp"/>

        <RadioButton
            android:id="@+id/radioButton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New RadioButton"

            android:layout_marginRight="5dp"    />
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <RadioButton
            android:id="@+id/radioButton4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New RadioButton"

            android:layout_marginLeft="5dp"/>

        <RadioButton
            android:id="@+id/radioButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New RadioButton"

            android:layout_marginRight="5dp"/>
    </LinearLayout>
</RadioGroup>
person Gagan Sethi    schedule 29.01.2016
comment
это работает, спасибо !, я пытаюсь сделать gridview, но я думаю, что это сделать проще. спасибо - person Drenyl; 29.01.2016
comment
проблема в том, что я не могу сейчас получить значение radiobtn - person Drenyl; 29.01.2016
comment
используйте отдельные переключатели, а затем программно контролируйте их состояния включения / выключения. - person Gagan Sethi; 29.01.2016
comment
я могу получить только один идентификатор radiobtn int radioButtonId = r1.getId(); RadioButton selectedans = (RadioButton) findViewById(radioButtonId); String selectedansText = selectedans.getText().toString(); - person Drenyl; 29.01.2016
comment
Я сделал это, но не могу выбрать только один переключатель. Он позволяет выбрать несколько переключателей, что нарушает политику группы переключателей. - person Ajay Mistry; 22.08.2019

RadioGroup расширяет android.widget.LinearLayout, поэтому это невозможно. Если вы хотите, чтобы они были в сетке, используйте соответствующий макет, но вам нужно выполнить всю логику выбора только одного элемента и т. д. самостоятельно.

person and_dev    schedule 29.01.2016

Вы используете GridLayout может помочь.

person Phuoc Huynh    schedule 29.01.2016
comment
Можете ли вы рассказать об этом подробнее, сэр? Или примеры - person Drenyl; 29.01.2016

RadioGroup расширяет LinearLayout, поэтому невозможно выровнять RadioButton в сетке ниже, это решение, которое я реализовал из другого ответа, взгляните на это

package com.devprovider.customview;

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.RadioButton;
import android.widget.TableLayout;
import android.widget.TableRow;


public class ToggleButtonGroupTableLayout extends TableLayout  implements OnClickListener {

    private static final String TAG = "ToggleButtonGroupTableLayout";
    private RadioButton activeRadioButton;

    /** 
     * @param context
     */
    public ToggleButtonGroupTableLayout(Context context) {
        super(context);

    }

    /**
     * @param context
     * @param attrs
     */
    public ToggleButtonGroupTableLayout(Context context, AttributeSet attrs) {
        super(context, attrs);

    }

    @Override
    public void onClick(View v) {
        final RadioButton rb = (RadioButton) v;
        if ( activeRadioButton != null ) {
            activeRadioButton.setChecked(false);
        }
        rb.setChecked(true);
        activeRadioButton = rb;
    }


    @Override
    public void addView(View child, int index,
            android.view.ViewGroup.LayoutParams params) {
        super.addView(child, index, params);
        setChildrenOnClickListener((TableRow)child);
    }



    @Override
    public void addView(View child, android.view.ViewGroup.LayoutParams params) {
        super.addView(child, params);
        setChildrenOnClickListener((TableRow)child);
    }


    private void setChildrenOnClickListener(TableRow tr) {
        final int c = tr.getChildCount();
        for (int i=0; i < c; i++) {
            final View v = tr.getChildAt(i);
            if ( v instanceof RadioButton ) {
                v.setOnClickListener(this);
            }
        }
    }

    public int getCheckedRadioButtonId() {
        if ( activeRadioButton != null ) {
            return activeRadioButton.getId();
        }

        return -1;
    }
}

ваш макет будет таким

<?xml version="1.0" encoding="utf-8"?>
<com.devprovider.customview.ToggleButtonGroupTableLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:id="@+id/radGroup1">
    <TableRow>
            <RadioButton android:id="@+id/rad1" android:text="Button1"
                android:layout_width="105px" android:layout_height="wrap_content"
                android:textSize="13px" />
            <RadioButton android:id="@+id/rad2" android:text="Button2"
                android:layout_width="105px" android:textSize="13px"
                android:layout_height="wrap_content" />

    </TableRow>
    <TableRow>
            <RadioButton android:id="@+id/rad1" android:text="Button1"
                android:layout_width="105px" android:layout_height="wrap_content"
                android:textSize="13px" />
            <RadioButton android:id="@+id/rad2" android:text="Button2"
                android:layout_width="105px" android:textSize="13px"
                android:layout_height="wrap_content" />

    </TableRow>
    <TableRow>
            <RadioButton android:id="@+id/rad1" android:text="Button1"
                android:layout_width="105px" android:layout_height="wrap_content"
                android:textSize="13px" />
            <RadioButton android:id="@+id/rad2" android:text="Button2"
                android:layout_width="105px" android:textSize="13px"
                android:layout_height="wrap_content" />

    </TableRow>
</com.devprovider.customview.ToggleButtonGroupTableLayout>

Благодаря этому ответу Grid of Radio Button

person rana_sadam    schedule 17.11.2016