Zawsze używałem android:background="?selectableItemBackground"
dla efektu ripple, gdy kliknięto widok (na przykład LinearLayout
). Myślę, że czytałem gdzieś, że to jest wstecznie kompatybilne z API 14.Używając? SelectableItemBackground z białym tłem
Jednak znalazłem, że muszę użyć tego efektu marszczyć, ale z białym tłem. W szczególności mam układ dla elementu listy, który będzie wyświetlany na domyślnym tle koloru (będę rozciągał się od Theme.AppCompat.Light.NoActionBar
), więc chcę, aby element listy wyróżniał się na tym tle, kolorując element listy jako biały (#FFFFFF
) .
Oto układ element listy:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="?selectableItemBackground"
android:layout_width="match_parent"
android:layout_height="wrap_content">
...
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:paddingLeft="@dimen/mdu_keyline_1"
android:paddingRight="@dimen/mdu_keyline_1"
android:paddingTop="@dimen/mdu_padding_normal"
android:paddingBottom="@dimen/mdu_padding_normal">
...
</LinearLayout>
</FrameLayout>
Powyższy wywołuje odzew bez białym tle.
Gdy próbuję:
<FrameLayout ...
android:background="@color/white">
To oczywiście powoduje białe tło ale bez odzew.
Próbowałem też coś innego - i to produkowane wynik najbliżej czego szukam:
<FrameLayout ...
android:background="@color/white">
...
<LinearLayout ...
android:background="?selectableItemBackground">
Powyższy dał mi białe tło z odzew. Mimo to,, tętnienie zawsze zaczyna się od środka, niezależnie od tego, którą część elementu kliknę.
Oto kilka zrzutów ekranu pokazujących aktualny wynik (zignoruj cień na górze listy elementów - jest to cień z AppBarLayout
i Toolbar
używam).
Jak mogę osiągnąć pożądany efekt?
To jest idealne! Dziękuję bardzo. –
Hm. Ciekawe, dlaczego nigdy wcześniej nie słyszałem o nowej wiedzy. Działa jednak! Dzięki! – EGHDK