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.