sirve recyclerview que para implementar dependency como cardview card android padding android-5.0-lollipop android-cardview

android - que - recyclerview adapter



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

Estoy usando android:paddingLeft y android:paddingTop para configurar el relleno del nuevo widget CardView pero no funciona.

Puedo establecer el margen para todos los controles dentro de CardView como una solución, pero eso es un problema si hay demasiados controles.

¿Cómo configurar el relleno para el nuevo widget de vista de tarjeta?

<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 la vista previa de L utiliza RoundRectDrawableWithShadow para dibujar su fondo, que anula Drawable.getPadding() para agregar relleno de sombra. El fondo de la vista se establece a través del código después del inflado, que anula cualquier relleno especificado en XML.

Tienes dos opciones:

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

La última opción es la 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>


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>

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


Si desea utilizar el relleno de CardView en dispositivos pre-L, y hacer que se vea igual en dispositivos Lollipop +, entonces necesitará usar setUseCompatPadding(true) , o la variante XML cardUseCompatPadding="true" .

Esto se debe a que "CardView agrega 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 se ven diferentes y las vistas pueden no alinearse correctamente. Por lo tanto, la forma más fácil de solucionar ese problema son las formas mencionadas anteriormente, o usar márgenes en su lugar.

Código de 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: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(boolean)

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