2016-02-10 7 views
8

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

0

a cambiare colore a catena in tutto l'app è possibile annuncio questo nella vostra app tema

<item name="colorControlHighlight">@color/ripple</item> 
+1

non voglio cambiare il colore ondulazione, voglio cambiare il colore di sfondo quando lo stato è "attivato" cioè selezionato. – Asiat

+0

È possibile aggiungere un colore di sfondo e aggiungere clickable = true per il colore ondulato – Rohit

8

è 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> 
+1

Questo funziona solo su Lollipop e su ... si bloccherà con un'eccezione di classe sconosciuta su Kitkat e dispositivi inferiori. –

+0

Sì vero ... Ho appena scoperto che non è possibile utilizzare gli attributi del tema in XML disegnabile fino a Lollipop. – Nit