CardView是android5.0以上的新控件,卡片式布局,继承FrameLayout实现,今天这里主要说一下CardView的使用和注意的地方

1.首先肯定需要引用gradle配置

compile'com.android.support:cardview-v7:21.0.+'

介绍一下主要的属性:

app:cardBackgroundColor这是设置背景颜色

app:cardCornerRadius设置圆角大小

app:cardElevation设置z轴的阴影

app:cardMaxElevation设置z轴的最大高度值

app:contentPadding 设置内容的内边距

app:contentPaddingLeft 设置内容的左内边距

app:contentPaddingTop 设置内容的上内边距

app:contentPaddingRight 设置内容的右内边距

app:contentPaddingBottom 设置内容的底内边距

具体的效果根据需求进行测试吧。

我们今天主要记录一下跳过使用这个东西的一些火坑

这玩意是5.0+上发布的 所以根据平时的习惯做出来以后再5.0+上的手机上运行很完美,根本看不出来问题。

但是有一天我用cardView+listView写好以后再4.4的一个机子上运行后发现cardview的外边距(layout_margin)很大。第一反应 肯定是兼容出问题咯,果然发现在低版本中设置了 CardElevation 之后 CardView 会自动留出空间供阴影显示,而 Lollipop 之后则需要手动设置 Margin 边距来预留空间,导致我在设置 Margin 在 Android 5.0 机器上运行后发现 Kitkat 机器调试时发现边距非常大,严重地浪费了屏幕控件而且还很丑。

找到问题就好说,解决方案就很明确了:

1.在res下创建values(默认已经存在)和一个values-v21的文件夹并且在两个文件下创建dimens.xml文件

2.dimens.xml文件中自定义一个dimen

values-v21文件夹下

10dp

values文件夹下

0dp

因为在低版本下设置CardElevation后默认就有了边距,所以这里我们就不要在设置边距了,不然会叠加导致低版本外边距很大

3.只需要在CardView下设置

android:layout_margin="@dimen/cardView_m"

这样就可以根据自己的需求可以调整出自己想要的距离

--------------------华丽丽的分割线----------------------

好吧,再说一下CardView上的按下,点击的效果实现。你以为还是跟正常的background设置一下就好了?如果真这样,那就可以不用说了,很明显不是。

foreground:通过这个东西来设置点击的效果实现

android:foreground="?attr/selectableItemBackground"

但是很尴尬,这个只能支持5.0+上的版本,低版本看着很low,有点生硬,所以还是自己动手才是王道,下面我提供一下自己实现的点击效果:

1.创建drawable和drawable-v21文件夹,并且实现以下的一个select_card_foreground.xml文件

drawable-v21文件夹下

select_card_foreground.xml
android:color="#20000000"
android:drawable="@drawable/card_foreground_selector" />
card_foreground_selector.xml文件

drawable文件夹下

select_card_foreground.xml
android:drawable="@drawable/card_foreground_selector"
android:insetLeft="2dp"
android:insetRight="2dp"
android:insetTop="4dp"
android:insetBottom="4dp"/>```
card_foreground_selector.xml文件
```

最后在CardView设置:

android:foreground="@drawable/select_card_foreground"

最后就能完美使用了。