Efekt falowania na urządzeniach pre- i Lollipop +
harrane i Liuting mają rację. Przyjęta odpowiedź nie jest najlepszą drogą. Pokażę w kodzie, jak zmienić kolor tętnienia w wersjach wcześniejszych niż Lollipop i wyższych
Twój AppTheme powinien dziedziczyć z dowolnego motywu AppCompat i zawierać atrybut colorControlHighlight (bez prefiksu „android:”)
<!-- Application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
<item name="colorControlHighlight">#40ffffff</item>
</style>
Twój widok powinien zawierać clickable = "true" (lub powinien mieć programowo ustawiony odbiornik kliknięć), a tło powinno mieć postać „? Attr / selectableItemBackgroundBorderless” lub „? Attr / selectableItemBackground”:
<LinearLayout
...
android:clickable="true"
android:background="?attr/selectableItemBackgroundBorderless"/>
Uwaga: jeśli twój widok rodzica ma białe tło, nie zobaczysz efektu tętnienia, ponieważ jest biały. Zmień wartość colorControlHighlight na inny kolor
Ponadto, jeśli chcesz mieć różne kolory tętnienia dla różnych działań, możesz ustawić osobisty motyw dla każdego działania w pliku Manifest, na przykład:
<activity
android:name="com.myapp.GalleryActivity"
android:theme="@style/RedRippleTheme"
/>
Różne kolory tętnień dla różnych fragmentów w tej samej czynności?
Możesz zmienić atrybuty motywu działania dla każdego fragmentu w czasie wykonywania. Po prostu nadpisz je, zanim fragment zostanie napompowany Twoim niestandardowym stylem i zastosuj do bieżącego motywu:
w values / styles.xml
<style name="colorControlHighlight_blue">
<item name="colorControlHighlight">@color/main_blue_alpha26</item>
</style>
Następnie w Twoim fragmencie przed inflacją w onCreateView()
:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
getContext().getTheme().applyStyle(R.style.colorControlHighlight_blue, true); //blue ripple color
View view = inflater.inflate(R.layout.my_fragment_layout, container, false);
return view;
}
Ten styl będzie działał tylko dla tego fragmentu
Inny kolor tętnienia dla różnych widoków? (Lollipop +)
Możesz zmienić kolor tętnienia dla każdego widoku osobno za pomocą
colorControlHighlight
atrybutu, nie zadziała, jeśli zastosujesz je bezpośrednio do widoku:
<TextView
...
colorControlHighlight="#40ffffff"/> <!-- DOESN'T WORK -->
powinieneś zastosować go jako motyw:
<TextView
...
android:theme="@style/colorControlHighlight_blue"/>
PS Czasami takie podejście pomaga, jeśli masz nieznane problemy z ripple i nie możesz ich rozgryźć. W moim przypadku użyłem biblioteki przesuwnej innej firmy, która zepsuła efekty ripple dla całego układu i wyraźnie dodałem ten motyw do wszystkich klikalnych widoków, które wypracowały dla mnie.
colorControlHighlight
zamiastandroid:colorControlHighlight
działa lepiej dla mnie, w przeciwnym razie jest to tylko dla v21 +