Вопрос

Я пытаюсь сделать сетку радиопроизводств для моего приложения, я узнал, что это невозможно использовать регулярно 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top