CardView no muestra Shadow en Android L

Mi Cardview dentro de Listview no muestra sombra en Android L (Nexus 5). Además, los bordes redondos no se muestran correctamente. Aquí está el código para la Vista del Adaptador de Listview:

        

Y el ListView xml:

    

Funciona bien en dispositivos pre-L con sombras apropiadas y esquinas redondeadas. Pero no funciona en el dispositivo Android L ¿Puedes decirme qué me falta aquí?

Después de revisar nuevamente los documentos, finalmente encontré la solución.

Simplemente agregue card_view:cardUseCompatPadding="true" a su CardView y las sombras aparecerán en los dispositivos Lollipop.

Lo que sucede es que el área de contenido en un CardView toma diferentes tamaños en los dispositivos pre-lollipop y lollipop. Entonces, en los dispositivos con piruletas, la sombra está cubierta por la tarjeta, por lo que no es visible. Al agregar este atributo, el área de contenido permanece igual en todos los dispositivos y la sombra se vuelve visible.

Mi código xml es como:

  ...  

use la app:cardUseCompatPadding="true" dentro de su cardview. Por ejemplo

   

No olvides que para dibujar sombras debes usar hardwareAccelerated Dibujo hardwareAccelerated

hardwareAccelerated = true enter image description here

hardwareAccelerated = false hardware CardView acelerado

Ver Android Hardware Acceleration para más detalles

compruebe el hardware. Acelerado en manifiesto: haga que sea verdadero, haciendo que sea falso, elimine las sombras, cuando aparezca la sombra falsa en la vista previa de xml, pero no en el teléfono.

Finalmente pude obtener sombras en el dispositivo Lollipop añadiendo margen a la vista de tarjeta. Aquí está el diseño final de la vista de carta:

         

Puede agregar esta línea de código para la sombra en la vista de tarjeta

 card_view:cardElevation="3dp" 

A continuación tienes un ejemplo

  

¡Espero que esto ayude!

Puedes intentar agregando esta línea

  card_view:cardUseCompatPadding="true" 

El código completo parecerá así

    

Simplemente agrega estas tags:

 app:cardElevation="2dp" app:cardUseCompatPadding="true" 

Entonces se convierte en:

  

En mi caso, la sombra no se mostraba en los dispositivos con Android L porque no añadí un margen. El problema es que CardView crea este margen automáticamente en <5 dispositivos, así que ahora lo hago así:

 CardView card = new CardView(context); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); if (Build.VERSION_CODES.LOLLIPOP == Build.VERSION.SDK_INT) { params.setMargins(shadowSize, shadowSize, shadowSize, shadowSize); } else { card.setMaxCardElevation(shadowSize); } card.setCardElevation(shadowSize); card.setLayoutParams(params); 

En primer lugar, asegúrese de que las siguientes dependencias se hayan agregado correctamente y comstackdas en el archivo build.gradle

  dependencies { ... compile 'com.android.support:cardview-v7:21.0.+' } 

y después de esto prueba el siguiente código:

    

el problema aumenta en Android L debido a que el atributo layout_margin no se agrega

Agregue esta línea a CardView ….

 card_view:cardUseCompatPadding="true" //for enable shadow card_view:cardElevation="9dp" // this for how much shadow you want to show 

Consejos

Puede evitar layout_marginTop y layout_marginBottom, ya que la propia sombra ocupa un poco de espacio hacia arriba y hacia abajo. La cantidad de espacio se define por cuánto usará en card_view: cardElevation = “ndp”.

Happy Coding (:

Agregue android: hardwareAccelerated = “true” en su archivo de manifiestos, como a continuación, funciona para mí

   

mueva su atributo “uses-sdk” en la parte superior del manifiesto, como la siguiente respuesta https://stackoverflow.com/a/27658827/1394139

La vista de mi reciclador fue lenta en la carga, por lo que al leer stackoverflow.com cambié hardwareAccelerated a “falso” y luego la elevación no se muestra en el dispositivo. El cambio nuevamente a verdadero. Esto funciona para mi.