программная настройка радиогруппы

#android

#Android

Вопрос:

Я хотел бы создать пользовательскую, View которая содержит RadioGroup . Внутри RadioGroup я бы хотел, чтобы RadioButtons была настроена так, чтобы первая RadioButton находилась вверху слева, 2-я — под ней, третья справа от 1-й и 4-я — под ней. Другими словами, я хочу создать группу, в которой радиокнопки расположены в виде квадрата. Я думаю, что если я установлю ориентацию группы вертикальной, то все радиокнопки будут располагаться по прямой линии. Если, с другой стороны, я установлю ориентацию на горизонтальную, то, опять же, все радиокнопки будут располагаться по прямой линии, по горизонтали. Есть ли способ сделать то, что я хочу, или я вынужден настроить две отдельные RadioGroups , обе в горизонтальной ориентации?

Комментарии:

1. вы можете использовать RelativeLayout вместо LinearLayout

2. @Pratik как это поможет? Это поможет мне настроить группу относительно чего-то другого, но как насчет кнопок относительно друг друга?

Ответ №1:

Попробуйте обработать RadioButtons без использования RadioGroup .

Подключите отдельных пользователей RadioButtons и удерживайте их в ArrayList<RadioButton> .

 List<RadioButton> radioButtons = new ArrayList<RadioButton>();

radioButtons.add( (RadioButton)findViewById(R.id.button1) );        
radioButtons.add( (RadioButton)findViewById(R.id.button2) );
radioButtons.add( (RadioButton)findViewById(R.id.button3) );
etc.
  

Установите OnCheckedChangeListener для каждой RadioButton .

 for (RadioButton button : radioButtons){

    button.setOnCheckedChangeListener(new OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if (isChecked) processRadioButtonClick(buttonView);
        }   
    });

}
  

Затем создайте метод, чтобы снять флажок с невыбранной RadioButtons .

 private void processRadioButtonClick(CompoundButton buttonView){

    for (RadioButton button : radioButtons){

        if (button != buttonView ) button.setChecked(false);
    }

}
  

Используя этот подход, RadioButtons можно расположить в любом месте XML-макета.

Комментарии:

1. Потрясающий ответ Мэтт, не могли бы вы, пожалуйста, объяснить, как получить идентификатор выбранного переключателя, я пытался, но у меня не получилось. Жду вашего ценного ответа. Спасибо.

Ответ №2:

Вы должны создать подкласс из RadioGroup и переопределить метод onLayout().

Комментарии:

1. Спасибо! У вас есть пример того, как будет выглядеть переопределение для выполнения того, что я пытаюсь сделать?

2. вы могли бы выяснить, как реализовать onLayout, из представления панели управления Романа Нурика: gist.github.com/882650