2014-11-20 11 views
12

Sto cercando di utilizzare un controllo visualizzazione elenco su Lollipop nelle seguenti condizioni:visualizzazione elenco impostare un selettore di ondulazione personalizzato

  1. Il tipo di tema è il default Theme.Material (tema scuro).
  2. La visualizzazione elenco è contenuta all'interno di un layout più grande che ha uno sfondo bianco.
  3. La vista elenco dovrebbe avere un selettore di lista che appare con lo sfondo bianco.

NOTA: sono costretto ad utilizzare un elenco personalizzato di colore di selezione, perché se io uso uno sfondo bianco, il materiale scuro a tema di selezione utilizza il colore colorControlHighlight del tema per l'ondulazione, che è 40ffffff, e non mostra su.

ho provato quanto segue:

di layout xml

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:background="@android:color/white" > 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <ListView 
     android:id="@+id/list_view" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:listSelector="@drawable/list_selector" /> 

</LinearLayout> 

list_selector xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="#ff0000" > 

</ripple> 

E visualizzazione elenco fila xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:gravity="center_vertical" 
    android:orientation="horizontal" 
    tools:ignore="UseCompoundDrawables" > 

    <ImageView 
     android:id="@+id/list_image" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/list_title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Quello che mi aspetto di vedere è quando Seleziono un oggetto, l'oggetto è selezionato con un'increspatura colorata come # ff0000. Tuttavia, questo è quello che finisce per vedere:

enter image description here

Quello che sto sperando per è un po 'vicino a questo comportamento - ma confinato all'interno della riga lista selezionata! Che cosa sto facendo di sbagliato?

Grazie, Zach

risposta

26

Stai utilizzando un ripple senza limiti, per esempio un'ondulazione senza contenuto o livello maschera, quindi l'ondulazione viene proiettata sullo sfondo del suo oggetto principale ListView. È necessario impostare un livello maschera per limitare i limiti di ripple.

res/drawable/my_list_selector.xml:

<?xml version="1.0" encoding="utf-8"?> 
<ripple xmlns:android="http://schemas.android.com/apk/res/android" 
    android:color="?attr/colorControlHighlight"> 
    <item android:id="@android:id/mask"> 
     <color android:color="@color/white" /> 
    </item> 
</ripple> 
+3

Grazie Alanv! Un'altra grande risposta oggi (mi hai aiutato con un'altra domanda a catena!). Molto apprezzato. – Zach

+0

Che cos'è '@ id/mask'? Devo definirlo da qualche altra parte? – poitroae

+0

Questo dovrebbe essere '@android: id/mask'. Risolto il codice di esempio. – alanv

Problemi correlati