Cómo configurar el relleno para el widget CardView en Android L

Estoy usando android:paddingLeft and android:paddingTop para establecer el relleno para el nuevo widget CardView pero no funciona.

Puedo fijar el margen para todos los controles dentro del CardView como una solución pero ése es un dolor si hay demasiados controles.

Cómo configurar el relleno para el nuevo widget cardview?

 <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="200dp" android:paddingLeft="20dp" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="20dp" android:paddingBottom="@dimen/activity_vertical_margin" card_view:cardCornerRadius="2dp"> <TextView android:id="@+id/info_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello World!"/> </android.support.v7.widget.CardView> 

CardView antes de L-preview utiliza RoundRectDrawableWithShadow para dibujar su fondo, que reemplaza a Drawable.getPadding() para agregar relleno de sombra. El fondo de vista se establece mediante el código después de la inflación, que reemplaza cualquier relleno especificado en XML.

Tiene dos opciones:

  1. Establezca el relleno en tiempo de ejecución mediante View.setPadding() y tenga cuidado de ajustar las sombras (pero sólo antes de la vista previa L).
  2. Coloque todo dentro de un diseño que especifique relleno.

Esta última opción es más segura.

 <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="200dp" card_view:cardCornerRadius="2dp"> <FrameLayout android:paddingLeft="20dp" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="20dp" android:paddingBottom="@dimen/activity_vertical_margin"> <TextView android:id="@+id/info_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello World!"/> </FrameLayout> </android.support.v7.widget.CardView> 

CardView debe manejar esto usando los atributos contentPadding que viene con :

 <android.support.v7.widget.CardView xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="200dp" card_view:cardCornerRadius="2dp" card_view:contentPaddingLeft="20dp" card_view:contentPaddingRight="@dimen/activity_horizontal_margin" card_view:contentPaddingTop="20dp" card_view:contentPaddingBottom="@dimen/activity_vertical_margin"> <TextView android:id="@+id/info_text" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Hello World!"/> </android.support.v7.widget.CardView> 

Si desea utilizar el relleno CardView en los dispositivos pre-L, y tener el mismo aspecto en los dispositivos Lollipop +, deberá utilizar setUseCompatPadding(true) o la variante XML cardUseCompatPadding="true" .

Esto se debe a que "CardView añade un relleno adicional para dibujar sombras en las plataformas antes de L". [1] Por lo tanto, la implementación predeterminada tiene diferentes versiones de API que parecen diferentes y las vistas pueden no alinearse correctamente. Por lo tanto, la manera más fácil de solucionar ese problema es las formas indicadas anteriormente, o utilizar márgenes en su lugar.

Ejemplo de código

 <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:layout_width="match_parent" android:layout_height="wrap_context" card_view:cardUseCompatPadding="true" card_view:contentPadding="8dp" card_view:cardCornerRadius="4dp" > ... </android.support.v7.widget.CardView> 

Fuentes

[1] CardView.setUseCompatPadding (booleano)

[2] android.support.v7.cardview: cardUseCompatPadding

Esto es lo que funcionó para mí – poner cada elemento en un diseño de marco

 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="-4dp"> <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:background="@color/white_three" android:orientation="vertical" card_view:cardCornerRadius="2dp" card_view:cardElevation="@dimen/card_elevation" card_view:cardMaxElevation="0dp" card_view:cardPreventCornerOverlap="false" card_view:cardUseCompatPadding="true" </android.support.v7.widget.CardView> 

Compruebe que card_view es " http://schemas.android.com/apk/res-auto " y no las herramientas, y también establece márgenes negativos en la vista de marco para mantener las sombras – funciona bien.

  • ¿Cómo manejar el botón OnClick del evento de tarjeta en GridView? Mejores prácticas
  • No se encontró ningún recurso que coincida con el nombre dado (en 'cardBackgroundColor' con el valor '? Android: attr / colorBackgroundFloating')
  • Visualización de widgets de interfaz de usuario en Cardview en android L
  • Cómo traer imageView delante de cardview? Cuando ambos son de Disposición Relativa childs
  • Colapsar CardView dentro de RecyclerView al animar
  • Anular Android-L CardView state_pressed para versiones anteriores de Android
  • "RecyclerView: No hay adaptador conectado; Omitir el diseño "para recyclerview en el fragmento
  • biblioteca de materiales de apoyo, no puede encontrar Cardview / Recycleview
  • Android listview dentro de cardview onTouch audiencia conflicto / sensibilidad
  • OnClickListener para CardView?
  • Excepción: android.view.InflateException: Línea de archivo XML binario # 2: Error al inflacionar la clase android.support.v7.widget.CardView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.