Радиогруппа расширяет RelatiVelayout?
-
27-10-2019 - |
Вопрос
Я пытаюсь сделать сетку радиопроизводств для моего приложения, я узнал, что это невозможно использовать регулярно RadioGroup
Потому что он расширяет LineArlayout и если вы попытаетесь организовать RadioButtons
Использование RELATIVELAYOUT внутри RadioGroup
а RadioGroup
не видит Buttons
внутри RelativeLayout
.
Поэтому, чтобы исправить это, я хочу сделать пользовательскую радиограмму, которая расширяет RELATIVELAYOUT вместо LINEARLAYOUT.
Как мне это сделать?
Обновление: я сделал то, что вы сказали, но у меня есть эти ошибки, я не знаю, как исправить в файле класса:
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
Решение
Вам нужно получить 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.