studio recyclerview example cardview card and android xml android-layout android-studio android-cardview

android - recyclerview - grid layout and cardview



Programar programáticamente ''? SelectableItemBackground'' en la vista de Android (5)

¡Ah allí! Para aquellos que trabajan con Kotlin, aquí hay algunas funciones de extensiones para agregar Ripple en el tipo de Vista de Android:

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

En xml, a menudo hago esto para emular el efecto onClick :

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

¿Hay alguna forma de acceder ?selectableItemBackground en java?


Deberías referenciarlo como

android.R.attr.selectableItemBackground


Estaba buscando la misma solución. Cambié ligeramente this respuesta para que sea más adecuada para la pregunta formulada. Llame al siguiente código de su constructor.

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


Intenta debajo del código.

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


Para appcompat puedes usar,

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