web-dev-qa-db-fra.com

Définir par programme '? SelectableItemBackground' sur Android voir

En XML, je fais souvent cela pour émuler onClick effet:

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

Est-il possible d'accéder à ?selectableItemBackground en java?

48
Hendra Anggrian

Pour appcompat vous pouvez utiliser,

TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(Android.R.attr.selectableItemBackground, outValue, true);
cardView.setBackgroundResource(outValue.resourceId);
114
Amit Vaghela

Pour ceux qui travaillent avec Kotlin, voici quelques fonctions d’extensions à ajouter à Ripple Android Type de vue:

private fun View.addRipple() = with(TypedValue()) {
    context.theme.resolveAttribute(Android.R.attr.selectableItemBackground, this, true)
    setBackgroundResource(resourceId)
}

private fun View.addCircleRipple() = with(TypedValue()) {
    context.theme.resolveAttribute(Android.R.attr.selectableItemBackgroundBorderless, this, true)
    setBackgroundResource(resourceId)
}
16
Nicolas Duponchel

Je cherchais la même solution. J'ai légèrement changé this répondre pour le rendre plus approprié pour la question posée. Appelez le code suivant à partir de votre constructeur.

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

Vous devriez le référencer comme

Android.R.attr.selectableItemBackground

5
vanomart

Essayez ci-dessous le 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
Hardik Trivedi