Czy istnieje prosty sposób na użycie niestandardowego obrazu dla pola wyboru? Chcę powielić zachowanie Gmaila oznaczone gwiazdką. Chcę mieć pole wyboru, które po zaznaczeniu jest wypełnioną gwiazdą. A kiedy odznaczona, jest pusta gwiazda. Czy muszę korzystać z podglądu obrazu i samodzielnie tworzyć własną logikę?
182
android:button
rozwiązanie jest znacznie lepsze niż użycie atrybutu tła!Utwórz rysunkowy selektor pola wyboru:
Upewnij się, że pole wyboru jest takie
android:button="@drawable/checkbox_selector"
źródło
Skopiuj plik btn_check.xml z android-sdk / platform / android - # / data / res / drawable do folderu graficznego projektu i zmień stany obrazu „włączony” i „wyłączony” na obrazy niestandardowe.
Wtedy twój xml będzie po prostu potrzebował
android:button="@drawable/btn_check"
Jeśli chcesz użyć różnych domyślnych ikon Androida, możesz użyć
android:button="@android:drawable/..."
źródło
res / drawable / day_selector.xml
res / layout / my_layout.xml
źródło
Jeśli masz otwarty kod źródłowy Androida, definicję stylów znajdziesz pod:
src / frameworks / base / core / res / res / values
źródło
Spróbuj -
Dodaj ten atrybut -
Użyj jak -
Naprawi wszystkie twoje problemy.
źródło
onSaveInstanceState()
ionRestoreInstanceState()
, myślę, że sprawdzony stan zostałby utracony podczas rotacjiInną opcją jest użycie ToggleButton z zerowym tłem i niestandardowym przyciskiem.
Poniżej przykład z selektorem koloru tekstu.
toggle_selector.xml
toggle_text.xml
źródło
Jeśli używasz niestandardowych adapterów,
android:focusable="false"
a nieandroid:focusableInTouchMode="false"
jest konieczne, aby elementy listy można było klikać podczas korzystania z pola wyboru.W rysunku> checkbox_layout.xml
źródło
Jeśli używasz androidx.appcompat: appcompat i chcesz niestandardowego rysowalnego (typu
selector
zandroid:state_checked
) do pracy na starych wersjach platformy oprócz nowych wersji platformy, musisz użyćzamiast
źródło
Na podstawie odpowiedzi Enselica i Rahula.
Działa dla mnie (przed i po API 21):
źródło