RecyclerView中的CardView具有额外的利润

vj9*_*vj9 33 android eclipse-adt android-cardview android-recyclerview

我在RecyclerView中使用CardView作为元素.这样做时,android会自动在cardView和屏幕之间以及不同的cardView之间生成边距.

<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" />
Run Code Online (Sandbox Code Playgroud)

我按照链接中的说明将它们集成到我的项目中: using-recyclerview-and-cardview-in-eclipse-adt

我之前使用过linearlayout作为list元素:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
Run Code Online (Sandbox Code Playgroud)

这工作得非常好,列表元素之间没有任何边距.我现在刚刚在cardView中放置了线性布局,这导致了额外的边距.

原因是我想为这些元素提供精确的边距,而我现在提供的任何边距都会被添加到这个预先存在的边距.我已经尝试向cardView元素提供零/负填充/边距,但这些都不起作用.

任何想法,我可以删除这些边距或以其他方式确切地知道添加了多少保证金.

Shu*_*ham 44

它对我有用.使用:

 card_view:cardElevation="0dp"
 card_view:cardMaxElevation="0dp"
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我不想删除卡片提升,所以你的解决方案是不行的 (12认同)
  • 这个,除了设置`cardCornerRadius ="1dp"`或其他一些任意的量为我工作!谢谢,@Shubham我认为设置cardMaxElevation就可以了 (3认同)

yig*_*git 41

你检查它是边缘还是填充?(开发选项/显示布局边界)

CardView在L前面的平台中添加填充以绘制阴影.在L中,除非你设定,否则useCompatPadding=true不应有任何差距.

添加负边距(尽管很难看)应该有效.如果不是,请添加一些代码,说明如何添加它们以及如何设置它们RecyclerView.

  • 这是一个填充,是的,我正在测试前L设备.感谢您指出我正确的方向:我在CardView文档中找到了以下内容:在L之前,CardView在其内容中添加了填充并为该区域绘制阴影.此填充量等于两侧的maxCardElevation +(1 - cos45)*cornerRadius,顶部和底部的maxCardElevation*1.5 +(1 - cos45)*cornerRadius.我可以从中找出填充值(并从我想要提供的内容中减去).我现在没有L设备,一旦我测试就会更新.ps:-ve margin不行. (4认同)
  • 更确切地说:card_view:cardUseCompatPadding ="true" (3认同)

Pia*_*asy 18

刚刚在@yigit的回答中描述,CardView将添加默认填充以在Android L之前绘制它的阴影.填充大小在CardView的doc中描述.

我发现清除这个填充(也为内容添加填充)的方法是使用CardView的contentPaddingLeft(/ Right/Top/Bottom)属性.

如果要清除默认填充,可以将contentPadding设置为负值.如果要添加内容填充,请将contentPadding设置为所需的值.

在我的例子中,我使用这些代码来清除默认填充:

card_view:contentPaddingLeft="-3dp"
card_view:contentPaddingRight="-3dp"
card_view:contentPaddingTop="-3dp"
card_view:contentPaddingBottom="-3dp"
Run Code Online (Sandbox Code Playgroud)

我尝试了@Shubham的回答,但在RadialGradient.java中抛出了IllegalStateException,并显示"radius必须> 0"的消息.


Oma*_*nik 15

使用以下两个标签:

card_view:cardPreventCornerOverlap="false"
card_view:cardUseCompatPadding="true"
Run Code Online (Sandbox Code Playgroud)


Sha*_*yan 5

添加card_view:cardPreventCornerOverlap="false"到您的card 图像仅当您的图像有圆角时才有效