2015-07-12 1 views
8

Ich versuche, den RecyclerView in einer Android-App zu verwenden. Ich habe das RecyclerView-Beispielprojekt in Android Studio importiert, und es funktioniert einwandfrei.Android selectableItemBackground kein Glow-Effekt auf lange drücken

Ich möchte die Elemente in der Recycler-Ansicht, um visuell zu reagieren, wenn der Benutzer sie lange drückt. Um dies zu tun, setze ich den Hintergrund der Ansicht auf selectableItemBackground. Ich diese Änderungen vorgenommen:

  • innen text_row_item.xml, habe ich diese Zeile auf dem FrameLayout tag:

    android:background="?android:attr/selectableItemBackground"

  • innen CustomAdapter.java, ich einen langen Klick Zuhörer auf dem FrameLayout hinzugefügt :

    v.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { Log.d(TAG, "Element " + getPosition() + " long clicked."); return true; } });

Wenn ich das modifizierte Beispiel auf einem Lollipop-Emulator ausführe, bekomme ich den schönen Welleneffekt, wenn ich die Elemente in der Recycler-Ansicht lange drücke.

Aber wenn ich die App auf einem KitKat-Emulator ausführen, bekomme ich nicht den Glow-Effekt, der mit KitKat kommt. Das Element in der Liste wird dunkler, wenn ich es lange drücke, und der Long-Click-Listener wird ausgeführt, aber ich habe erwartet, dass die Farbe leuchtet, wenn das lange Drücken ausgeführt wird. Hier

ist ein gif von dem, was ich seing: long press animation not working

Warum selectableItemBackground nicht den Schein-Effekt auf KitKat laufen? Wie kann ich es sowohl mit KitKat als auch mit Lollipop arbeiten lassen?

Antwort

3

Verwenden

android:background="?attr/selectableItemBackground" 
    android:backgroundTint="@android:color/holo_blue_bright" 
    android:clickable="true" 

in Ihrem recyleview Reihe Layout

+0

verwenden können Das funktioniert nicht. Wenn ich diese Attribute dem Tag FrameLayout hinzufüge, passiert nichts. Ich bekomme immer noch das gleiche Verhalten auf KitKat (keine Animation bei langem Drücken). – Ove

+0

clickable = "true" hat es für meinen Fall funktioniert, danke! Das Problem des Themeninhabers wird jedoch immer noch nicht gelöst – Bruce

0

hatte ich das gleiche Problem, wenn ich android:Theme.Holo.Light.DarkActionBar Stil benutzte. Nach dem Wechsel zu android:Theme.Material.Light.DarkActionBar funktioniert der Ripple-Effekt.

Also das einzige, was ich tun musste, um das Hinzufügen wurde:

android:theme="@android:style/Theme.Material.Light.DarkActionBar 

in application Knoten in Manifest.xml

Oder wenn Sie eine benutzerdefinierte verwenden styles.xml Sie nur die parent="android:Theme.Material.Light.DarkActionBar"