Voglio cambiare lo sfondo della mia vista quando lo stato è "attivato" e voglio preservare gli effetti (ripple) di ?attr:selectableItemBackground
. È possibile estendere o combinare il selettore di ?attr:selectableItemBackground
?android selezionabileItemBackground selection
risposta
a cambiare colore a catena in tutto l'app è possibile annuncio questo nella vostra app tema
<item name="colorControlHighlight">@color/ripple</item>
è possibile utilizzare un LayerDrawable
al fine di richiamare l'effetto drawable ripple (?attr:selectableItemBackground
) sopra il vostro colore di stato di attivazione.
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<selector>
<item android:state_activated="true">
<color android:color="?attr/colorPrimary"/>
</item>
<item>
<color android:color="@android:color/transparent"/>
</item>
</selector>
</item>
<item android:drawable="?attr/selectableItemBackground"/>
</layer-list>
Edit: Poiché non è possibile utilizzare gli attributi tema in un drawable XML prima API 21, sembra essere meglio mettere l'effetto drawable ondulazione come disegnabile in primo piano, e il selettore drawable colore attivato come sfondo disegnabile.
<View
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/yourView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foreground="?attr/selectableItemBackground"
android:background="@drawable/activated_color_selector">
Con res/drawable/activated_color_selector.xml
contenente:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true">
<!-- Can't use the ?attr/colorPrimary before API 21 -->
<color android:color="@color/primaryColor"/>
</item>
<item>
<color android:color="@android:color/transparent"/>
</item>
</selector>
Questo funziona solo su Lollipop e su ... si bloccherà con un'eccezione di classe sconosciuta su Kitkat e dispositivi inferiori. –
Sì vero ... Ho appena scoperto che non è possibile utilizzare gli attributi del tema in XML disegnabile fino a Lollipop. – Nit
non voglio cambiare il colore ondulazione, voglio cambiare il colore di sfondo quando lo stato è "attivato" cioè selezionato. – Asiat
È possibile aggiungere un colore di sfondo e aggiungere clickable = true per il colore ondulato – Rohit