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
War es hilfreich?

Lösung

Sie müssen das bekommen RadioGroupQuellcode 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 RadioGroupKonstruktoren 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top