Czy za pomocą selektora listy można zastosować niestandardowe tło do każdego elementu widoku listy?
W selektor określa domyślny @android:color/transparent
dla state_focused="false"
sprawy, ale zmiana ta w jakimś niestandardowym rozciągliwej nie wpływa na elementy, które nie zostały wybrane. Romain Guy wydaje się sugerować w tej odpowiedzi, że jest to możliwe.
Obecnie osiągam ten sam efekt, używając niestandardowego tła w każdym widoku i ukrywając je, gdy element jest zaznaczony / wyostrzony / cokolwiek, aby selektor był pokazany, ale byłoby bardziej elegancko, gdyby to wszystko było zdefiniowane w jednym miejscu.
Dla porównania, oto selektor, którego używam, aby spróbować uruchomić to:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="false"
android:drawable="@drawable/list_item_gradient" />
<!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
<item android:state_focused="true" android:state_enabled="false"
android:state_pressed="true"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_enabled="false"
android:drawable="@drawable/list_selector_background_disabled" />
<item android:state_focused="true" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="false" android:state_pressed="true"
android:drawable="@drawable/list_selector_background_transition" />
<item android:state_focused="true"
android:drawable="@drawable/list_selector_background_focus" />
</selector>
A tak ustawiam selektor:
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="@drawable/list_selector_background" />
Z góry dziękuję za pomoc!
Rozwiązanie dglmtn nie działa, gdy masz 9 łatek do rysowania z wypełnieniem jako tłem. Dziwne rzeczy się zdarzają, nawet nie chcę o tym rozmawiać, jak masz taki problem to je znasz.
Teraz, jeśli chcesz mieć widok listy z różnymi stanami i elementami do rysowania z 9 łatkami (myślę, że działałby z dowolnymi rysunkami i kolorami), musisz zrobić 2 rzeczy:
Najpierw ustaw row_selector.xml:
Nie zapomnij o
android:state_selected
. Działa jakandroid:state_focused
w przypadku listy, ale jest stosowany do elementu listy.Teraz zastosuj selektor do elementów (row.xml):
Utwórz przezroczysty selektor dla listy:
To powinno wystarczyć.
źródło
Nigdy, przenigdy nie używaj „koloru tła” dla wierszy widoku listy ...
to zablokuje każdą akcję selektora (to był mój problem!)
powodzenia!
źródło
setBackgroundColor
z „kolorem”. Ech ... UżyjsetBackground
lubsetBackgroundDrawable
zgodnie z wersją API z selektorem.Artykuł „Dlaczego moja lista jest czarna? Optymalizacja systemu Android” na blogu dla programistów Androida zawiera dokładne wyjaśnienie, dlaczego podczas przewijania tło listy zmienia kolor na czarny. Prosta odpowiedź: ustaw cacheColorHint na liście jako przezroczystą (# 00000000).
źródło
Wystarczy, jeśli włożysz
list_row_layout.xml
:listitem_selector.xml:
źródło
zamiast:
pisać
źródło
Możesz napisać motyw:
theme.xml
style.xml
my_selector to Twój niestandardowy selektor. Przykro mi, że nie wiem, jak napisać mój kod
źródło
Nie jestem pewien, jak osiągnąć zamierzony efekt za pomocą samego selektora - w końcu z definicji jest jeden selektor dla całej listy.
Możesz jednak kontrolować zmiany zaznaczenia i rysować, co chcesz. W tym przykładowym projekcie ustawiam przezroczystość selektora i rysuję pasek na wybranym elemencie.
źródło
<item android:state_focused="false" android:drawable="@android:color/transparent" />
klauzuli w selektorze domyślnym.Zawsze używam tej samej metody i działa zawsze i wszędzie: po prostu używam takiego selektora
i ustaw w ListView (BARDZO WAŻNE, ABY TO DZIAŁAŁO) atrybut
dla textColor po prostu umieść w folderze kolorów (WAŻNE, nie do rysowania!) selektor taki jak ten
to przykładowy szablon wiersza
wszystko pokazuje pracę bez żmudnych obejść. Mam nadzieję, że to pomoże
źródło
Zespół FrostWire tutaj.
Wszystkie badziewne api selektora nie działają zgodnie z oczekiwaniami. Po wypróbowaniu wszystkich rozwiązań przedstawionych w tym wątku do niczego, po prostu rozwiązaliśmy problem w momencie zawyżania elementu ListView.
Upewnij się, że Twój przedmiot zachowuje swój stan, zrobiliśmy to jako zmienna składowa elementu MenuItem (wybrana wartość logiczna)
Kiedy nadmuchujesz, zapytaj, czy element bazowy jest wybrany, jeśli tak, po prostu ustaw żądany zasób jako tło (czy to 9 łatka, czy cokolwiek). Upewnij się, że twój adapter jest tego świadomy i że wywołuje notifyDataChanged (), gdy coś zostało wybrane.
Byłoby naprawdę fajnie, gdyby selektory faktycznie działały, w teorii to ładne i eleganckie rozwiązanie, ale wygląda na to, że jest zepsute. POCAŁUNEK.
źródło