Jak już odpowiedzieliśmy, najprostszym rozwiązaniem jest dodanie jednego z poniższych elementów jako RecyclerView
tła wiersza:
android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
Jednak jeśli doświadczasz problemy z tą metodą lub chcesz mieć lepszą kontrolę nad kolorami, możesz wykonać następujące czynności.
Niestandardowy efekt falowania
Ta odpowiedź zaczyna się od tego prostego przykładu RecyclerView systemu Android . Będzie wyglądać jak na poniższym obrazku.
Dodaj selektor dla urządzeń starszych niż API 21
Przed API 21 (Android 5.0 Lollipop) kliknięcie RecyclerView
elementu zmieniło kolor tła (brak efektu tętnienia). To też będziemy robić. Jeśli nadal masz użytkowników z tymi urządzeniami, są oni przyzwyczajeni do takiego zachowania, więc nie będziemy się o nich zbytnio martwić. (Oczywiście, jeśli naprawdę chcesz również dla nich efektu ripple, możesz użyć własnej biblioteki ).
Kliknij res/drawable
folder prawym przyciskiem myszy i wybierz opcję Nowy> Plik zasobów do rysowania . Nazwij to custom_ripple
. Kliknij OK i wklej następujący kod.
custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/colorAccent" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
Użyłem colorAccent
jako koloru podświetlenia dla stanu wciśniętego, ponieważ był już dostępny, ale możesz zdefiniować dowolny kolor.
Dodaj efekt falowania dla urządzeń API 21+
Kliknij res/drawable
folder prawym przyciskiem myszy i wybierz opcję Nowy> Plik zasobów do rysowania . Zadzwoń custom_ripple
ponownie. Nie klikaj OK, ale tym razem. Z listy Dostępne kwalifikatory wybierz opcję Wersja , a następnie kliknij przycisk >> i wpisz 21
poziom platformy API . Teraz kliknij OK i wklej następujący kod.
v21 / custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">
<item
android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
Znowu użyłem colorAccent
koloru tętnienia, ponieważ był dostępny, ale możesz użyć dowolnego koloru. Maska ogranicza efekt tętnienia tylko do układu wierszy. Najwyraźniej kolor maski nie ma znaczenia, więc użyłem nieprzezroczystej bieli.
Ustaw jako tło
W układzie głównym elementu RecyclerView ustaw tło na niestandardowe tętnienie, które utworzyliśmy.
android:background="@drawable/custom_ripple"
W przykładowym projekcie , od którego zaczynaliśmy, wygląda to tak:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/custom_ripple"
android:padding="10dp">
<TextView
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</LinearLayout>
Skończone
Otóż to. Teraz powinieneś być w stanie uruchomić swój projekt. Dzięki tej odpowiedzi i temu filmowi na YouTube za pomoc.
CardView
w tej kwestii, niż nie dotyczą tego bardziej ogólnego pytania.