Radiogrupo que extiende relativeLayout?
-
27-10-2019 - |
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
Solución
Necesitas obtener el RadioGroup
El 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 RadioGroup
Los 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.