Mam ImageView, który ma ustawiony zasób obrazu do rysowania na selektor. Jak programowo uzyskać dostęp do selektora i zmienić obrazy stanu podświetlonego i niewyświetlonego?
Oto kod selektora:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/iconSelector">
<!-- pressed -->
<item android:state_pressed="true" android:drawable="@drawable/btn_icon_hl" />
<!-- focused -->
<item android:state_focused="true" android:drawable="@drawable/btn_icon_hl" />
<!-- default -->
<item android:drawable="@drawable/btn_icon" />
</selector>
Chcę być w stanie zastąpić btn_icon_hl
i btn_icon
innych obrazów.
Odpowiedzi:
O ile udało mi się znaleźć (próbowałem zrobić coś podobnego samodzielnie), nie ma możliwości zmodyfikowania pojedynczego stanu po zdefiniowaniu StateListDrawable. Możesz jednak zdefiniować NOWY za pomocą kodu:
Możesz po prostu mieć dwa z nich pod ręką lub stworzyć inny, jeśli potrzebujesz.
źródło
Miałem ten sam problem i poszedłem o krok dalej, aby go rozwiązać. Jedynym problemem jest jednak to, że nie możesz określić NavStateListDrawable w xml, więc musisz ustawić tło elementu interfejsu użytkownika za pomocą kodu. Następnie należy nadpisać metodę onStateChange, aby zapewnić, że za każdym razem, gdy zostanie zmieniony poziom głównego rysunku, zostanie również zaktualizowany poziom listy poziomów podrzędnych.
Tworząc NavStateListDrawable, musisz przejść na poziom ikony, którą chcesz wyświetlić.
Dla wszystkich różnych stanów do rysowania przycisku nawigacyjnego mam coś podobnego do następującego.
Zamierzałem opublikować to jako pytanie i odpowiedź, ale skoro zadałeś samo pytanie, proszę bardzo. Zwróć uwagę, że oszczędza to mnóstwo definicji plików xml. spadłem z około 50-100 definicji xml do około 4 !.
źródło