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文件夹下
<dimen name="cardView_m">10dp</dimen>
values文件夹下
<dimen name="cardView_m">0dp</dimen>
因为在低版本下设置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
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="#20000000"
android:drawable="@drawable/card_foreground_selector" />
card_foreground_selector.xml文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/color_d2d2d2"/>
</shape>
</item>
<item android:state_focused="true" android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="@color/color_d2d2d2"/>
</shape>
</item>
</selector>
drawable文件夹下
select_card_foreground.xml
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable="@drawable/card_foreground_selector"
android:insetLeft="2dp"
android:insetRight="2dp"
android:insetTop="4dp"
android:insetBottom="4dp"/>```
card_foreground_selector.xml文件
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true">
<shape android:shape="rectangle">
<solid android:color="@color/transparent_1"/>
</shape>
</item>
<item android:state_focused="true" android:state_enabled="true">
<shape android:shape="rectangle">
<solid android:color="@color/transparent_1"/>
</shape>
</item>
</selector>```
最后在CardView设置:
android:foreground="@drawable/select_card_foreground"
最后就能完美使用了。