#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