2015-09-27 22 views
5

Ich versuche, eine RippleDrawable als Hintergrund zu einer Listenansicht Zeile festzulegen. Bei der Verwendung von view.setBackgroundResource(R.drawable.ripple) funktioniert alles gut. WennsetBackgroundResource verhält sich anders als setBackground mit RippleDrawable

view.setBackground(view.getContext().getDrawable(R.drawable.ripple)) 

versucht, es funktioniert, aber die Welligkeit zeigt nicht, wenn schnell den Punkt zu berühren (Ich habe auch einen aktivierte/Überprüfungsstatus für das Element), es erscheint nur, wenn ich die gedrückte Ansicht halten.

Die setBackgroundResource Methode in View-Klasse sieht wie folgt aus:

if (resid != 0 && resid == mBackgroundResource) { 
    return; 
} 

Drawable d = null; 
if (resid != 0) { 
    d = mContext.getDrawable(resid); 
} 
setBackground(d); 

mBackgroundResource = resid; 

so dass im Grunde die genaue Sache, die ich manuell zu tun versuche.

HINWEIS: Ich möchte setBackground-Methode verwenden, weil ich die RippleDrawable programmatisch erstellen möchte.

Hat jemand eine Idee, warum das passiert?

Antwort

1

Statt die Welligkeit der Einstellung in der Zeile View, stellt sie auf den ListView mit dem listSelector Attribute:

<ListView 
    ... 
    android:listSelector="@drawable/ripple" /> 

Programmatically Sie es mit mListView.setSelector(...) einstellen.

+0

Ich muss Ich habe einen "aktivierten" Status für die Listenzeile und die Art, wie ich es geschafft habe, war, indem ich einen Hintergrund der Ansicht direkt und keinen 'listSelector' verwendet habe. Die Ripple funktioniert gut mit diesem Ansatz, es ist nur, dass ich versuchen muss, einen Weg zu finden, den Status "activated" korrekt zu haben. Es erscheint mir immer noch merkwürdig, dass es mit 'setBackgroundResource' gut funktioniert, aber mit' setBackgroundDrawable' nicht. Hast du eine Ahnung davon? – GeorgeP

1

Anruf View.invalidate(); zusammen mit View.requestLayout();

die CompoundButton Funktion setChecked(boolean) wenn verwendet entkräftet die View daher der View wird gebeten, sich erneut zu überprüfen und dann neu gezogen oder verlegt aus

Verwandte Themen