8

ich dieses 5. Hier ist ein Teil des Codes für meine CardView auf einem Nexus läuft:Ripples nicht mit selectableItemBackground als Vordergrund auf einem CardView mit einem Android 5.0-Gerät zeigt

 CardView cardView = new CardView(getActivity()); 
     cardView.setRadius(4); 
     LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 400); 
     lp.setMargins(32, 16, 32, 16); 
     cardView.setLayoutParams(lp); 
     cardView.setContentPadding(50, 50, 50, 50); 
     ... 
     cardView.setForeground(selectedItemDrawable); 

Und hier ist, wie ich das bekommen selectedItemDrawable:

 int[] attrs = new int[] { R.attr.selectableItemBackground }; 
     TypedArray ta = getActivity().obtainStyledAttributes(attrs); 
     selectedItemDrawable = ta.getDrawable(0); 
     ta.recycle(); 

Wenn ich die Karte tippen, um die Welligkeit, die mit dem selectedItemDrawable kommen sollen sind nicht angezeigt (es sieht genau das gleiches wie ohne den Vordergrund gesetzt). Ich benutze 5.0, also scheint das merkwürdig, da die appcompat-Dokumentation nur sagt, dass es nicht mit Pre-Lollipop-Geräten funktioniert. Weiß jemand, warum das so ist? Die Mindest-API-Stufe ist 16 und zielt auf 21.

+0

Sind Sie sicher, Sie haben keine Ansicht in Cardview, die auf Match_Parent gesetzt ist und einen eigenen Hintergrund hat? – Hellboy

+0

Ich habe einen Code auskommentiert, der dem CardView eine Ansicht hinzufügt, so dass nur CardView im Layout ist und die Ergebnisse gleich sind. Das Festlegen als Hintergrund für ein LinearLayout mit diesen Eigenschaften in der CardView macht auch nichts. – vemacs

+0

In der Tat, wenn die CardView in XML mit Android: Vordergrund = "? Android: attr/selectableItemBackground", gibt es immer noch keine Ripple-Effekt. – vemacs

Antwort

8

Es stellte sich heraus, dass ich meine Instanz von Drawable mit mehreren Kartenansichten teilte. Dies wurde durch die Rückkehr eine neue Instanz mit einem getSelectedItemDrawable Verfahren gelöst:

public Drawable getSelectedItemDrawable() { 
     int[] attrs = new int[]{R.attr.selectableItemBackground}; 
     TypedArray ta = getActivity().obtainStyledAttributes(attrs); 
     Drawable selectedItemDrawable = ta.getDrawable(0); 
     ta.recycle(); 
     return selectedItemDrawable; 
    } 

Dann ist es als Vordergrund Einstellung programmatisch:

 cardView.setForeground(getSelectedItemDrawable()); 
     cardView.setClickable(true); 

Jetzt habe ich den Welleneffekt auf 5,0.

+1

setForeground scheint nur auf API 23+ zu arbeiten. ... – user654628

+0

Bestätigt, setForeground() ist nur für API 23+ verfügbar - die Android-Dokumente haben es fälschlicherweise als API Level 1 aufgelistet. AOSP-Fehlerbericht hier - https://code.google.com/p/android/issues/ Detail? id = 186273. –

+0

Das hat bei mir nicht funktioniert. Ich habe versucht, dies direkt auf eine Bildansicht und auch auf ein Rahmenlayout mit der Bildansicht zu setzen. Keine funktionierte. –

Verwandte Themen