2016-06-23 10 views
15

In xml, ich dies oft onClick Effekt zu emulieren:Programatically setzt auf Android Ansicht

<android.support.v7.widget.CardView 
    android:id="@+id/cardView" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:foreground="?selectableItemBackground"> 

    ... 

</android.support.v7.widget.CardView> 

Gibt es eine Möglichkeit ?selectableItemBackground in Java zugreifen?

Antwort

50

Für AppCompat Sie,

TypedValue outValue = new TypedValue(); 
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true); 
cardView.setBackgroundResource(outValue.resourceId); 
+0

hilfreicher link, danke! –

+0

Ich habe viel gesucht und viele Antworten gefunden, aber das ist sicherlich das Beste. Ich danke dir sehr! –

0

Versuchen Sie den folgenden Code.

int[] attrs = new int[]{R.attr.selectableItemBackground}; 
TypedArray typedArray = context.obtainStyledAttributes(attrs); 
int backgroundResource = typedArray.getResourceId(0, 0); 
cardView.setBackgroundResource(backgroundResource); 
cardView.setClickable(true); 
typedArray.recycle(); 
+0

Es tut mir leid, aber dieser Code macht keinen Sinn für mich, was ist der Punkt, um 'TypedArray' zu erhalten, wenn Sie keine Ressource von ihm erhalten? –

2

verwenden Sie es als

android.R.attr.selectableItemBackground

0

Ich war auf der Suche für die gleiche Lösung verweisen. Ich änderte leicht this Antwort, um es für die gestellte Frage geeigneter zu machen. Rufen Sie den folgenden Code von Ihrem Konstruktor auf.

private void setClickableAnimation(Context context) 
{ 
    TypedValue outValue = new TypedValue(); 
    context.getTheme().resolveAttribute( 
     android.R.attr.selectableItemBackground, outValue, true);   
    setForeground(getDrawable(context, outValue.resourceId)); 
}