Pregunta

Estoy tratando de hacer una cuadrícula de botones de radio para mi aplicación, lo que he aprendido es que esto no es posible usar regularmente RadioGroup Porque extiende LinearLayout y si intentas organizar el RadioButtons Usar relativeLayout dentro del RadioGroup la RadioGroup no ve el Buttons dentro de RelativeLayout.

Entonces, para solucionar esto, quiero hacer un radiogrupo personalizado que extienda RelativeLayOut en lugar de LinearLayout.

¿Cómo hago esto?

Actualización: hice lo que dijiste, pero tengo estos errores que no sé cómo solucionar en el archivo de clase:

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
¿Fue útil?

Solución

Necesitas obtener el RadioGroupEl código fuente de aquí, reemplace todas las entradas de LinearLayout con RelativeLayout.

Agregue este código a algún archivo XML en su proyecto (generalmente su nombre es attrs.xml):

<resources>
    <declare-styleable name="RadioGroup">
        <attr name="android:checkedButton" />
    </declare-styleable>
</resources>

Reemplazar RadioGroupLos constructores con estos:

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();
    }
}

Elimine el siguiente constructor del LayoutParams clase interior:

public LayoutParams(int w, int h, float initWeight) {
    super(w, h, initWeight);
}

Reemplazar todos los acontecimientos de setOnCheckedChangeWidgetListener() llamadas de método con el setOnCheckedChangeListener() método. IMPORTANTE: En este caso, no será posible usar este método desde un código que use este widget.

No he probado esto, pero espero que esto funcione.

Otros consejos

Copie la fuente de Radiogrup aquí y edítelo para cambiarlo para extender RelativeLayOut en lugar de LinearLayout.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top