cardview向下兼容API21以下

CardView - 符合MD设计风格的卡片式控件,可以方便的添加阴影效果和圆角效果,看上去有层次感,使用也非常简单,直接在我们的布局外面套上该控件即可,但是使用还是有坑,分享一下。

1.如果使用cardview,设置边距的时候,一定要使用margin 而不能使用padding,如果使用了padding,就显示不出阴影效果了,而且看上去被吃掉的感觉;阴影效果的显示是基于你的margin的,如果你margin设的小,看上去的阴影不是很完全,margin设的大一点,看上去的阴影比较完整。
2.看图
在android5.1以上使用cardview,一切使用正常,但是在android5.0及以下,就出现了如上的图,周围都出现了白边,另外本身如果是圆角效果,但是里面的内容是方的话,就会有顶出去的感觉,查看cardview的文档,发现其中有一个属性cardPreventCornerOverlap

1
2
3
<!-- Add padding to CardView on v20 and before to prevent intersections between the Card content and rounded corners. -->
<!-- 在v20和之前的版本中添加内边距,这个属性是为了防止卡片内容和边角的重叠 -->
<attr name="cardPreventCornerOverlap" format="boolean" />

cardPreventCornerOverlap默认为true,意思是阻止API 20或者之前的CardView的corner和内部元素重叠。没有重叠就产生了上边的效果,多了一条白边。

所以,为什么会出现上图的原因,就是cardview里面的元素和cardview重叠了,但是元素本身没有圆角,所以顶点伸出去了。还有就是这个属性导致的,在低版本中都添加了内边距,那么处理办法就是:

1.
在xml中cardview添加以下属性,设置cardview的元素不与cardview重叠

1
app:cardPreventCornerOverlap="false"

2.
如果背景设置有圆角,我们可以通过shape来画圆角背景给父布局,或者使用自定义的view来设置ImageView圆角,这样就能够向下兼容了。