RadioGroup -RelATival -RelATelayout?
-
27-10-2019 - |
Frage
Ich versuche, ein Netz von Optionsfeldern für meine App zu erstellen. Ich habe gelernt, dass dies nicht möglich mit regulärer Verwendung möglich ist RadioGroup
Weil es linearlayout erstreckt und wenn Sie versuchen, das zu arrangieren RadioButtons
Verwenden von RelATelayout im Inneren der RadioGroup
das RadioGroup
Sieht das nicht Buttons
im Inneren RelativeLayout
.
Um dies zu beheben, möchte ich eine benutzerdefinierte RadioGroup erstellen, die RelATivalout anstelle von Linearlayout erweitert.
Wie mache ich das?
UPDATE: Ich habe getan, was Sie gesagt haben, aber ich habe diese Fehler. Ich weiß nicht, wie ich in der Klassendatei repariert werden soll:
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
Lösung
Sie müssen das bekommen RadioGroup
Quellcode von hier, ersetzen Sie alle Einträge von LinearLayout
mit RelativeLayout
.
Fügen Sie diesen Code einer XML -Datei in Ihrem Projekt hinzu (normalerweise ist der Name attr.xml):
<resources>
<declare-styleable name="RadioGroup">
<attr name="android:checkedButton" />
</declare-styleable>
</resources>
Ersetzen RadioGroup
Konstruktoren mit diesen:
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();
}
}
Entfernen Sie den folgenden Konstruktor aus dem LayoutParams
Innenklasse:
public LayoutParams(int w, int h, float initWeight) {
super(w, h, initWeight);
}
Ersetzen Sie alle Vorkommen von setOnCheckedChangeWidgetListener()
Methodenaufrufe mit dem setOnCheckedChangeListener()
Methode. WICHTIG: In diesem Fall kann es nicht möglich sein, diese Methode aus einem Code zu verwenden, der dieses Widget verwendet.
Ich habe das nicht versucht, hoffe aber, dass dies funktionieren wird.
Andere Tipps
Kopieren Sie die Quelle für RadioGroup von hier und bearbeiten Sie es, um es zu ändern, um RelATivalout anstelle von linearlayout zu erweitern.