引言
在google i/o 2014上,google公布了android l preview版本,此版本的ui有了非常大的改变,很炫很给力!同时,google也给出了两个可以向下兼容的控件放到了v7包中,分别是recyclerview和cardview,这篇博文就说一下怎么使用cardview。
cardview的包在哪?
虽然说cardview整合到了v7中,但是在support-v7中并不能发现,通过查看sdk extra路径下的文件可以发现,其名字叫cardview-v7。
这个路径下就有cardview相关的东西了,包括已经打包好的aar包。
依赖
如果应用是以gradle构建的,引用cardview就很简单了:
1
2
3
4
|
dependencies {
compile filetree(dir: 'libs' , include: [ '*.jar' ])
compile 'com.android.support:cardview-v7:21.0.0-rc1'
}
|
如果gradle提示找不到,就证明你的sdk需要更新了,把google support包更新到最新吧。
如果没有用gradle构建,就需要找到jar包引用进来,而jar包隐藏在cardview的aar文件中:
以压缩包方式打开aar,提取出其中的class.jar,这个jar文件就可以当作库文件进行依赖了。
依赖添加完成后,进行编译会发现出现minsdk错误,cardview-v7的minsdk为“l",其实cardview能够向下兼容到2.0。
在android gradle tools 0.11版本后,可以通过xml中的tools配置进行节点替换,而androdistudio对gradle tools的支持更好一些,其parentide intellij都不行,所以目前我能找到的正常使用cardview的ide及配置办法只有在androidstudio中,不过这也是趋势,早用早好的事情。
解决办法:
在使用cardview的工程的androidmanifest.xml中:
1
2
3
|
<uses-sdk
xmlns:tools= "http://schemas.android.com/tools"
tools:node= "replace" />
|
意思就是在做androidomanifest.xml编译时,采用替换的策略,即全部使用build.gradle中定义的属性作为最终属性。添加完成后,再次编译,问题解决。
使用
在使用cardview之前,要明白cardview是个什么东西。cardview如linearlayout、framelayout一样都是viewgroup,即其他控件的容器。cardview继承于framelayout,所以framelayout的属性他都有,同时cardview还有几个特殊的属性:
在api21(android l)等级以上拥有属性elevation,意为cardview的z轴阴影,只有l平台有效。只能通过xml中的elevation属性指定;
其余(2.0以上)有属性cardbackgroundcolor,意为cardview的卡片颜色,只能通过xml的cardbackgroundcolor进行指定;
其余(2.0以上)有属性cardconerradius,意为cardview卡片的四角圆角矩形程度,单位dimen(dp px sp),可以通过xml指定,也可以通过代码中的setradius指定。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
<android.support.v7.widget.cardview xmlns:android= "http://schemas.android.com/apk/res/android"
xmlns:app= "http://schemas.android.com/apk/res-auto"
android:id= "@+id/cardview"
app:cardcornerradius= "8dp"
app:cardbackgroundcolor= "@color/black"
android:layout_margin= "8dp"
android:layout_height= "80dp"
android:layout_width= "match_parent" >
<textview
android:text= "textview in cardview"
android:layout_gravity= "center"
android:textsize= "26sp"
android:textcolor= "@color/l_white"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content" />
</android.support.v7.widget.cardview>
|
效果图:
cardview继承至framelayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。cardview是一个layout,可以布局其他view。
cardview常用属性:
- card_view:cardelevation 阴影的大小
- card_view:cardmaxelevation 阴影最大高度
- card_view:cardbackgroundcolor 卡片的背景色
- card_view:cardcornerradius 卡片的圆角大小
- card_view:contentpadding 卡片内容于边距的间隔
- card_view:contentpaddingbottom 卡片内容与底部的边距
- card_view:contentpaddingtop 卡片内容与顶部的边距
- card_view:contentpaddingleft 卡片内容与左边的边距
- card_view:contentpaddingright 卡片内容与右边的边距
- card_view:contentpaddingstart 卡片内容于边距的间隔起始
- card_view:contentpaddingend 卡片内容于边距的间隔终止
- card_view:cardusecompatpadding 设置内边距,v21+的版本和之前的版本仍旧具有一样的计算方式
- card_view:cardpreventconreroverlap 在v20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠
再来看一个例子:
1
2
3
4
5
6
7
8
9
10
|
<android.support.v7.widget.cardview xmlns:card_view= "http://schemas.android.com/apk/res-auto"
android:layout_width= "200dp"
android:layout_height= "wrap_content"
card_view:cardbackgroundcolor= "#303069"
card_view:cardcornerradius= "10dp"
card_view:cardpreventcorneroverlap= "true"
card_view:cardusecompatpadding= "true"
card_view:contentpadding= "10dp" >
...
</android.support.v7.widget.cardview>
|
注:在gradle的dependencies中添加`compile 'com.android.support:cardview-v7:21.+'`
然后视图中的卡片基本上会这样显示:
cardview继承至framelayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影。cardview是一个layout,可以布局其他view。