Programmatically set '?selectable itembackground " sur Android view

Dans le xml, je le fais souvent ce à émuler onClick en 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?

24
demandé sur Amit Vaghela 2016-06-23 12:35:48

5 réponses

appcompat vous pouvez utiliser,

TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground, outValue, true);
cardView.setBackgroundResource(outValue.resourceId);
71
répondu Amit Vaghela 2017-10-13 13:25:08

Vous devez le référencer comme

android.R.attr.selectableItemBackground

3
répondu vanomart 2016-06-23 09:43:38

je suis à la recherche pour la même solution. J'ai légèrement changé réponse pour la rendre plus adaptée à la question posée. Appelez le code suivant 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));
}
2
répondu Wirling 2018-02-20 12:08:42

essayez le code ci-dessous.

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
répondu Hardik Trivedi 2016-06-23 09:40:46

Hy là ! Pour ceux qui travaillent avec Kotlin, voici quelques extensions fonctions pour ajouter Ripple Sur Android View type:

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)
}
0
répondu Nicolas Duponchel 2018-08-09 14:03:52