Gibt es eine einfache Möglichkeit, ein benutzerdefiniertes Bild für ein Kontrollkästchen zu verwenden? Ich möchte das "markierte" Verhalten von Google Mail duplizieren. Ich möchte also ein Kontrollkästchen haben, das, wenn es aktiviert ist, ein ausgefüllter Stern ist. Und wenn nicht markiert, ist ein leerer Stern. Muss ich eine Bildansicht verwenden und meine eigene Logik selbst erstellen?
182
android:button
Lösung ist viel besser als die Verwendung von Hintergrundattributen!Erstellen Sie eine Auswahl für ein zeichnbares Kontrollkästchen:
Stellen Sie sicher, dass Ihr Kontrollkästchen so ist
android:button="@drawable/checkbox_selector"
quelle
Kopieren Sie die Datei btn_check.xml von android-sdk / platform / android - # / data / res / drawable in den Zeichenordner Ihres Projekts und ändern Sie die Bildzustände "Ein" und "Aus" in Ihre benutzerdefinierten Bilder.
Dann braucht deine XML nur noch
android:button="@drawable/btn_check"
Wenn Sie verschiedene Standard-Android-Symbole verwenden möchten, können Sie verwenden
android:button="@android:drawable/..."
quelle
res / drawable / day_selector.xml
res / layout / my_layout.xml
quelle
Wenn Sie Android Open Source Code haben, finden Sie die Stildefinition unter:
src / frameworks / base / core / res / res / values
quelle
Versuch es -
Fügen Sie dieses Attribut hinzu -
Verwenden Sie wie -
Es wird alle Ihre Porbleme reparieren.
quelle
onSaveInstanceState()
undonRestoreInstanceState()
Methoden, ich denke, der überprüfte Zustand würde bei der Rotation verloren gehenEine andere Option ist die Verwendung eines ToggleButton mit Null-Hintergrund und einer benutzerdefinierten Schaltfläche.
Unten sehen Sie ein Beispiel, das auch eine Auswahl für die Textfarbe enthält.
toggle_selector.xml
toggle_text.xml
quelle
Wenn Sie benutzerdefinierte Adapter als
android:focusable="false"
undandroid:focusableInTouchMode="false"
verwenden, um Listenelemente während der Verwendung des Kontrollkästchens anklickbar zu machen.In drawable> checkbox_layout.xml
quelle
Wenn Sie androidx.appcompat: appcompat verwenden und möchten, dass ein benutzerdefiniertes Zeichen (vom Typ
selector
withandroid:state_checked
) neben neuen Plattformversionen auch auf alten Plattformversionen funktioniert, müssen Sie verwendenanstatt
quelle
Basierend auf den Antworten von Enselic und Rahul.
Es funktioniert bei mir (vor und nach API 21):
quelle