8

biegnę to na Nexus 5. Oto część kodu dla mojego CardView:Zmarszczki nie wykazujące selectableItemBackground jak planie na CardView z Android 5.0 urządzenie

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

A oto jak się dostać selectedItemDrawable:

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

Gdy klikniesz kartę, tętnienia, które miało pochodzić z selectedItemDrawable nie pojawia (wygląda dokładnie tak samo jak bez planie zestawie). Używam wersji 5.0, więc wydaje mi się to dziwne, ponieważ dokumentacja appcompat mówi tylko, że nie działa z urządzeniami pre-Lollipop. Czy ktoś wie, dlaczego tak się dzieje? Minimalny poziom API to 16, celem jest 21.

+0

Czy jesteś pewien, że nie masz żadnego widoku w widoku z karty, który jest ustawiony na match_parent i ma własne tło? – Hellboy

+0

Skomentowałem dowolny kod, który dodaje widok do CardView, więc tylko CardView jest w układzie, a wyniki są takie same. Ustawienie, że jako tło do LinearLayout z tymi właściwościami w CardView również nic nie robi. – vemacs

+0

Rzeczywiście, podczas definiowania CardView w XML z Androidem: foreground = "? Android: attr/selectableItemBackground", nadal nie ma efektu marszczenia. – vemacs

Odpowiedz

8

Okazało się, że udostępniam moją instancję Drawable z wieloma kartami. Ten problem został rozwiązany przez powrocie nową instancję za pomocą metody getSelectedItemDrawable:

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

następnie ustawienie go jako pierwszym planie programowo:

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

Teraz uzyskać odzew na 5,0.

+1

setForeground wydaje się działać tylko na API 23+. ... – user654628

+0

Potwierdzona, setForeground() jest dostępna tylko w interfejsie API 23+ - dokumentacja Androida jest niepoprawnie umieszczona na liście o poziomie API 1. Raport o błędzie AOSP tutaj - https://code.google.com/p/android/issues/ szczegół? id = 186273. –

+0

To nie działa dla mnie. Próbowałem umieścić to bezpośrednio w widoku obrazu, a także w układzie klatek zawierających widok obrazu. Żaden nie zadziałał. –

Powiązane problemy