我在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" />
我按照链接中的说明将它们集成到我的项目中: using-recyclerview-and-cardview-in-eclipse-adt
我之前使用过linelayout作为列表元素:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
这完全正常,列表元素之间没有任何边距。我现在只是将线性布局放在cardView中,这导致了额外的边距。
原因是我想为这些元素提供精确的边距,而我现在提供的任何边距都会被添加到这个预先存在的边距。 我已经尝试向cardView元素提供零/负填充/边距,但这些都不起作用。
任何想法,我都可以删除这些边距或者确切地知道添加了多少边距。
答案 0 :(得分:44)
它对我有用。使用:
card_view:cardElevation="0dp"
card_view:cardMaxElevation="0dp"
答案 1 :(得分:41)
你检查它是否是边距或填充? (开发选项/显示布局边界)
CardView
在L前面的平台中添加填充以绘制阴影。在L中,除非您设置useCompatPadding=true
,否则不应有任何差距。
添加负边距(尽管很难看)应该有用。如果不是,请添加一些代码,说明如何添加它们以及如何设置RecyclerView
。
答案 2 :(得分:17)
在@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"
我尝试了@Shubham的回答,但在RadialGradient.java中抛出了IllegalStateException,并显示“radius必须为&gt; 0”的消息。
答案 3 :(得分:14)
使用以下两个标签:
card_view:cardPreventCornerOverlap="false"
card_view:cardUseCompatPadding="true"
答案 4 :(得分:4)
将card_view:cardPreventCornerOverlap="false"
添加到card
仅当您的图像具有圆角时才有效
答案 5 :(得分:2)
好吧,似乎有一种更简单的方法可以做到这一点,而无需猜测填充和所有:
card_view:cardPreventCornerOverlap="false"
或使用java:
cardView.setPreventCornerOverlap(false)
答案 6 :(得分:1)
来自@ vj9的评论在已接受的问题下帮助我计算了抵消额。在这里分享,因为它可能会帮助其他人:
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);
}
答案 7 :(得分:0)
使用
android:adjustViewBounds="true"
在想要包含在cardview中的视图
答案 8 :(得分:0)
我知道它已经很晚了,但我希望它会帮助某人
app:cardPreventCornerOverlap="false"
将app:cardPreventCornerOverlap设置为false可以解决问题:)
答案 9 :(得分:-2)
myCardView.setShadowPadding(0,0,0,0);