Widziałem kilka pytań SO i podali kilka możliwych metod osiągnięcia tego, czego chcę. Na przykład:
Użyj
colorControlHighlight
atrybutu w styles.xml.Oto moje style-v21.xml:
<style name="SelectableItemBackground"> <item name="android:colorControlHighlight">#5677FC</item> <item name="android:background">?attr/selectableItemBackground</item> </style>
I mój widget:
<TextView android:id="@+id/tv_take_photo_as_bt" android:layout_width="280dp" android:layout_height="48dp" android:text="@string/act_take_photo" style="@style/SelectableItemBackground"/>
I to nie działa. Próbowałem też dodać
parent="Theme.AppCompat
styl „SelectableItemBackground”, zmienićcolorControlHighlight(no android: prefix)"
lub zmienić na?android:attr/selectableItemBackground
, żadne z nich nie jest przydatne.Użyj
backgroundTint
atrybutu w układzie.Więc dodaję
android:backgroundTint="#5677FC"
do mojegoTextView
. Wciąż bezużyteczne. Potem próbowałem zmienićandroid:backgroundTintMode
nasrc_in
isrc_atop
, ale nigdy nie robią różnicy.
Jak więc mogę zmienić kolor tętnienia, gdy używam go ?attr/selectableItemBackground
jako tła. Skupiam się tylko na Lollipop i nowszych wersjach. Z góry dziękuję!
colorControlHighlight
zamiastandroid:colorControlHighlight
działa lepiej dla mnie, w przeciwnym razie jest to tylko dla v21 +clickable="true"
i efekt tętnienia zadziałaEfekt 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:”)
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”:
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:
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
Następnie w Twoim fragmencie przed inflacją w
onCreateView()
: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:powinieneś zastosować go jako motyw:
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.
źródło
Pokazuje efekt tętnienia z kolorem na API +21 i prostym szarym tłem na prasie dla API -21. Dodaj ten styl:
I ustaw to na widok:
źródło
android:theme
a nie to, czego ludzie zwykle używająstyle
.Przyjęta odpowiedź jest błędna.
Prawidłowym sposobem użycia jest to, o czym Liuting wspomniał w komentarzu. Użyj
colorControlHighlight
zamiastandroid:colorControlHighlight
do zmiany wartości domyślnejcolorControlHighlight
zAppCompat
* Zapoznaj się z http://android-developers.blogspot.co.uk/2014/10/appcompat-v21-material-design-for-pre.html w sekcji Theming *
źródło
Wykonaj poniższe czynności:
your_layout.xml
style.xml
źródło
Ten kod działa dla mnie, aby utworzyć ripple:
Nie znalazłem sposobu na zmodyfikowanie atrybutu selectableItemBackground. Dlatego zrobiłem to jak wyżej.
źródło
W ciemnym czarnym motywie (lub dowolnej innej) aplikacji spróbuj użyć jak poniżej, najpierw utwórz
ripple_effect.xml
wdrawable
folderze i dodaj kod, taki jaknastępnie ustaw tło na dowolny widok, np.
Linear layout, Button, TextView
itp.źródło
Użyj atrybutu pierwszego planu jako selectableItemBackground, a atrybutu tła jako żądanego koloru.
źródło
How can I modify ripple color when using ?attr/selectableItemBackground as background?