color cardview android shadow android-cardview

android - color - cardview shadow



Android CardView con un color de sombra personalizado (3)

¿Es posible cambiar el color de la sombra alrededor de CardView? ¿Se utiliza principalmente para marcar la tarjeta seleccionada como se encendió ?

Debe ser válido en dispositivos L y pre-L.


He usado un pequeño truco. Un CardView se pone detrás de otro. Ambos son iguales, la diferencia es card_view:cardElevation="10dp" para el fondo uno, y card_view:cardElevation="2dp" para el card_view:cardElevation="2dp" one. La resta de elevación proporciona cuánto tiempo es tu sombra, y el color de la segunda CardView será el color de la sombra para la primera.

Ejemplo:

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/view_click_basement" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" card_view:cardCornerRadius="5dp" card_view:cardBackgroundColor="@color/colorNewGreen" card_view:cardElevation="10dp" card_view:cardUseCompatPadding="true"> <android.support.v7.widget.CardView android:id="@+id/view_click" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="2dp" card_view:cardCornerRadius="5dp" card_view:cardElevation="2dp" card_view:cardUseCompatPadding="true">


CardView colores de sombra de CardView se definen en los recursos de la biblioteca de CardView. Puede anularlos redefiniendo el valor del recurso en su propio proyecto, pero no puede cambiarlos dinámicamente por código.

Edición: la anulación del valor del recurso solo afecta a los dispositivos anteriores a Lollipop. En Lollipop y superior, CardView siempre utiliza la implementación de sombra nativa cuyo color no se puede cambiar.


Actualización : comprobar mi modificación .

Aquí hay una solución:

Copie el código fuente de CardView . Luego cree su propio módulo de biblioteca de Android y use este módulo en lugar de la biblioteca de soporte. Después de estos, comente o elimine el código en CardView como a continuación :

static { // if (Build.VERSION.SDK_INT >= 21) { // IMPL = new CardViewApi21Impl(); // } else if (Build.VERSION.SDK_INT >= 17) { IMPL = new CardViewApi17Impl(); } else { IMPL = new CardViewBaseImpl(); } IMPL.initStatic(); }

Es decir, CardViewApi17Impl versión compatible con CardViewApi17Impl incluso cuando api sea 21 o superior. Luego, puede definir su propia cardview_shadow_start_color y cardview_shadow_end_color para anular aquellos en la clase RoundRectDrawableWithShadow . Además, puedes hacerlo más personalizable.

La esperanza puede ayudar a alguien.