studio seleccionar radiogroup radiobutton horizontal habilitar deshabilitar deseleccionar java android xml radio-button radio-group

java - seleccionar - RadioGroup extiende RelativeLayout?



radiogroup android horizontal (2)

Estoy tratando de hacer una grilla de botones de radio para mi aplicación, lo que he aprendido es que esto no es posible con RadioGroup regular porque extiende LinearLayout y si tratas de organizar los RadioButtons usando RelativeLayout DENTRO del RadioGroup RadioGroup no funciona t ver los Buttons dentro de RelativeLayout .

Entonces, para arreglar esto, quiero hacer un RadioGroup personalizado que extienda RelativeLayout en lugar de LinearLayout.

¿Cómo hago esto?

ACTUALIZACIÓN: Hice lo que dijo, pero tengo estos errores que no sé cómo corregir en el archivo de la 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


Copie el origen de RadioGroup desde aquí y edítelo para modificarlo y ampliar RelativeLayout en lugar de LinearLayout.


RadioGroup obtener el código fuente de RadioGroup desde aquí , reemplazar 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>

Reemplace los constructores de RadioGroup 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 de la clase interna LayoutParams :

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

Reemplace todas las apariciones de llamadas al método setOnCheckedChangeWidgetListener() con el método setOnCheckedChangeListener() . IMPORTANTE : en este caso, no será posible utilizar este método desde un código que use este widget.

No lo he intentado pero espero que esto funcione.