2014-11-20 16 views
12

Ich versuche, eine Listenansicht auf Lollipop unter den folgenden Bedingungen zu verwenden:Listenansicht einen benutzerdefinierten Ripple Selektor

  1. Das Thema Typ ist der Standard Theme.Material (dunkles Thema).
  2. Die Listenansicht ist in einem größeren Layout enthalten, das einen weißen Hintergrund hat.
  3. Die Listenansicht sollte einen Listen-Selektor haben, der mit dem weißen Hintergrund angezeigt wird.

HINWEIS: Ich bin gezwungen eine benutzerdefinierte Liste Wähler Farbe zu verwenden, denn wenn ich einen weißen Hintergrund verwenden, das dunkele Material Themenwähler des colorControlHighlight Farbe für die Welligkeit des Themas verwendet, die 40ffffff ist, und bis nicht zeigen.

Ich versuchte zunächst, die folgenden:

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> 

Und Liste xml Ansicht Reihe

<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> 

Was ich erwarte, um zu sehen, ist, wenn Ich wähle einen Gegenstand, der Gegenstand wird mit einer Kräuselung als # ff0000 gefärbt. Allerdings ist das, was ich am Ende sehen:

enter image description here

Was erhoffe ich mir etwas nahe an dieses Verhalten - aber innerhalb der ausgewählten Listenzeile beschränkt! Was mache ich falsch?

Danke, Zach

Antwort

26

Sie eine unbegrenzte Welligkeit, z.B. eine Welligkeit ohne Inhalt oder Maskenebene, so dass die Welligkeit auf den Hintergrund des übergeordneten ListView projiziert wird. Sie sollten eine Maskenebene festlegen, um die Wellengrenzen einzuschränken.

res/ziehbar/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

Dank Alanv! Eine weitere großartige Antwort heute (Sie haben mir früher mit einer anderen Frage geholfen!). Sehr geschätzt. – Zach

+0

Was ist '@ id/maske'? Muss ich es woanders definieren? – poitroae

+0

Das sollte '@android: id/mask' sein. Das Codebeispiel wurde korrigiert. – alanv

Verwandte Themen