with top que corner color cardview card actions android eclipse-adt android-recyclerview android-cardview

top - cardview button android



CardView dentro de RecyclerView tiene márgenes adicionales (11)

Estoy usando un CardView como elemento dentro de un RecyclerView. Al hacerlo, Android genera automáticamente márgenes entre el CardView y la pantalla y entre diferentes CardViews.

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/galleryCardBGColor" app:cardCornerRadius="2dp" > <android.support.v7.widget.RecyclerView android:id="@+id/my_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" />

Seguí las instrucciones en el enlace para integrarlos en mi proyecto: using-recyclerview-and-cardview-in-eclipse-adt

Había estado utilizando previamente un linearlayout para el elemento de lista:

<LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" >

Esto funcionó perfectamente bien, sin márgenes de ningún tipo entre los elementos de la lista. Acabo de colocar el diseño lineal dentro de cardView, lo que ha dado como resultado márgenes adicionales.

La razón es que quiero proporcionar márgenes exactos para estos elementos, y los márgenes que proporciono ahora se suman a estos márgenes preexistentes. He intentado suministrar rellenos / márgenes cero / negativos al elemento cardView pero ninguno de estos funciona.

Cualquier idea, puedo eliminar estos márgenes o saber exactamente cuánto margen se está agregando.


¿Comprobaste si es margen o relleno? (Opciones de desarrollo / mostrar límites de diseño)

CardView agrega relleno en plataformas pre-L para dibujar sombras. En L, a menos que establezca useCompatPadding=true , no debe haber ningún espacio.

Añadir márgenes negativos (aunque sea feo) debería funcionar. Si no es así, agregue más código sobre cómo los está agregando y cómo está configurando RecyclerView .


Bueno, parece que hay una manera mucho más fácil de hacerlo, sin adivinar el relleno y todo:

card_view:cardPreventCornerOverlap="false"

o utilizando java:

cardView.setPreventCornerOverlap(false)


El comentario de @ vj9 bajo la pregunta aceptada me ayudó a calcular las compensaciones. Compartiéndolo aquí porque podría ayudar a alguien más:

public static int getVerticalCardViewOffset(Context context) { Resources res = context.getResources(); int elevation = res.getDimensionPixelSize(R.dimen.cardview_default_elevation); int radius = res.getDimensionPixelSize(R.dimen.cardview_default_radius); return (int) (elevation * 1.5 + (1 - Math.cos(45)) * radius); } public static int getHorizontalCardViewOffset(Context context) { Resources res = context.getResources(); int elevation = res.getDimensionPixelSize(R.dimen.cardview_default_elevation); int radius = res.getDimensionPixelSize(R.dimen.cardview_default_radius); return (int) (elevation + (1 - Math.cos(45)) * radius); }


Funcionó para mí Utilizar:

card_view:cardElevation="0dp" card_view:cardMaxElevation="0dp"


Recién descrito en la respuesta de @yigit, CardView agregará un relleno predeterminado para dibujar su sombra antes de Android L. El tamaño del relleno se describe en el documento de CardView.

Descubrí que la forma de eliminar este relleno (también para agregar contenido para el contenido) es usar los atributos contentPaddingLeft (/ Right / Top / Bottom) de CardView.

Si desea borrar el relleno predeterminado, puede establecer contentPadding en valor negativo. Si desea agregar relleno de contenido, establezca contentPadding en el valor que desee.

En mi caso, uso este código para borrar el relleno predeterminado:

card_view:contentPaddingLeft="-3dp" card_view:contentPaddingRight="-3dp" card_view:contentPaddingTop="-3dp" card_view:contentPaddingBottom="-3dp"

Intenté la respuesta de @Shubham, pero se lanza una excepción IllegalStateException en RadialGradient.java con el mensaje "el radio debe ser> 0".


Sé que es tarde pero espero que ayude a alguien

app:cardPreventCornerOverlap="false"

configuración de la aplicación: cardPreventCornerOverlap a false hará el truco :)


Si no necesita el radio de la esquina o el nivel de elevación, considere usar FrameLayout en pre-Lollipop.

<include layout="@layout/card_view_compat" />

layout / card_view_compat

<merge xmlns:android="http://schemas.android.com/apk/res/android" > <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <include layout="@layout/content" /> </FrameLayout> </merge>

layout-v21 / card_view_compat

<merge xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" app:cardCornerRadius="3dp" app:cardElevation="4dp" > <include layout="@layout/content" /> </android.support.v7.widget.CardView> </merge>


Utilice estas dos etiquetas a continuación:

card_view:cardPreventCornerOverlap="false" card_view:cardUseCompatPadding="true"


agregue card_view:cardPreventCornerOverlap="false" a su card Solo funciona si su imagen tiene esquinas redondeadas.


myCardView.setShadowPadding (0,0,0,0);


utilizar

android:adjustViewBounds="true"

En la vista que quieras envuelta en el Cardview.