Радиогруппа, расширяющаяся относительно других?
Я пытаюсь сделать сетку переключателей для моего приложения, что я узнал, что это невозможно с помощью регулярного RadioGroup
, потому что он расширяет LinearLayout, и если вы пытаетесь организовать RadioButtons
с помощью RelativeLayout внутри RadioGroup
, то RadioGroup
не видит Buttons
внутри RelativeLayout
.
Как мне это сделать?
Обновление: я сделал то, что вы сказали, но у меня есть эти ошибки, которые я не знаю, как исправить в файле класса:
Description Resource Path Location Type
RadioGroup_checkedButton cannot be resolved or is not a field RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 81 Java Problem
The constructor RelativeLayout.LayoutParams(int, int, float) is undefined RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 265 Java Problem
The method setOnCheckedChangeWidgetListener(CompoundButton.OnCheckedChangeListener) is undefined for the type RadioButton RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 363 Java Problem
The method setOnCheckedChangeWidgetListener(null) is undefined for the type RadioButton RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 377 Java Problem
VERTICAL cannot be resolved to a variable RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 68 Java Problem
Widget_CompountButton_RadioButton cannot be resolved or is not a field RadioGroupRelative.java /BlockBall/src/com/stickfigs/blockball line 79 Java Problem
2 ответа:
Вам нужно получить исходный код
RadioGroup
из здесь, замените все записиLinearLayout
наRelativeLayout
.Добавьте этот код в некоторый xml-файл в вашем проекте (обычно его имя-attrs.xml):
<resources> <declare-styleable name="RadioGroup"> <attr name="android:checkedButton" /> </declare-styleable> </resources>
Замените конструкторы
RadioGroup
на следующие:public RadioGroup(Context context) { super(context); if (!isInEditMode()) { init(); } } public RadioGroup(Context context, AttributeSet attrs) { super(context, attrs); if (!isInEditMode()) { TypedArray attributes = context.obtainStyledAttributes( attrs, R.styleable.RadioGroup, 0, android.R.style.Widget_CompoundButton_RadioButton); int value = attributes.getResourceId(R.styleable.RadioGroup_checkedButton, View.NO_ID); if (value != View.NO_ID) { mCheckedId = value; } attributes.recycle(); init(); } }
Удалите следующий конструктор из внутреннего класса
LayoutParams
:public LayoutParams(int w, int h, float initWeight) { super(w, h, initWeight); }
Замените все вхождения вызовов метода
setOnCheckedChangeWidgetListener()
методомsetOnCheckedChangeListener()
. важно : в этом случае невозможно будет используйте этот метод из кода, который использует этот виджет.Не пробовал этого, но надеюсь, что это сработает.
Скопируйте источник для Радиогруппы из здесь и отредактируйте его, чтобы изменить его на расширение RelativeLayout вместо LinearLayout.