导读

本篇文章将介绍Android 5.0新增的组件CardView (继承于FrameLayout)

以及本人在开发中遇到的诡异问题

控件私有属性说明

属性 说明
android.support.v7.cardview:cardBackgroundColor 背景颜色
android.support.v7.cardview:cardCornerRadius 边缘圆角大小
android.support.v7.cardview:cardElevation z轴的阴影
android.support.v7.cardview:cardMaxElevation z轴阴影的最大高度值
android.support.v7.cardview:cardPreventCornerOverlap 是否防止CardView 里的内容和和圆角重叠 (Api<=20)
android.support.v7.cardview:cardUseCompatPadding 是否给CardView这个控件设置内边距 (Api>=21)
android.support.v7.cardview:contentPadding 内容(子View)的padding
android.support.v7.cardview:contentPaddingBottom 内容(子View)的底部padding
android.support.v7.cardview:contentPaddingLeft 内容(子View)的左侧padding
android.support.v7.cardview:contentPaddingRight 内容(子View)的右侧padding
android.support.v7.cardview:contentPaddingTop 内容(子View)的上部padding

控件使用说明

准备工作: moudle的bulid.gradle 添加依赖库

compile 'com.android.support:cardview-v7:26.0.0-alpha1'

XML文件静态使用

        <!--card_view:cardBackgroundColor  背景颜色--><!--card_view:cardCornerRadius  边缘圆角大小--><!--card_view:cardElevation   z轴的阴影--><!--card_view:cardMaxElevation  z轴阴影的最大高度值--><!--card_view:cardUseCompatPadding  是否给CardView这个控件设置内边距 API>=21--><!--card_view:cardPreventCornerOverlap  是否防止内容和圆角重叠 API<=20--><!--card_view:contentPadding  内容(子View)的padding--><!--card_view:contentPaddingLeft  内容(子View)的左侧padding--><!--card_view:contentPaddingTop  内容(子View)的上部padding--><!--card_view:contentPaddingRight 内容(子View)的右侧padding--><!--card_view:contentPaddingBottom 内容(子View)的底部padding--><android.support.v7.widget.CardView
            android:id="@+id/cardview_def"android:layout_width="match_parent"android:layout_height="wrap_content"card_view:cardBackgroundColor="@color/colorPurple"card_view:cardCornerRadius="30dp"card_view:cardElevation="10dp"card_view:cardMaxElevation="10dp"card_view:cardPreventCornerOverlap="true"card_view:cardUseCompatPadding="true"card_view:contentPadding="@dimen/content_padding"card_view:contentPaddingBottom="@dimen/content_padding"card_view:contentPaddingLeft="@dimen/content_padding"card_view:contentPaddingRight="@dimen/content_padding"card_view:contentPaddingTop="@dimen/content_padding">//dosomting</android.support.v7.widget.CardView>

代码动态使用

在Activity类,findViewById 找到CardView组件,然后设置相应的属性即可<!--card_view:cardCornerRadius  边缘圆角大小-->mCardView.setRadius(float);<!--card_view:cardElevation   z轴的阴影-->mCardView.setCardElevation(float); 或 mCardView.setElevation();  为了兼容性,建议使用前者<!--card_view:cardMaxElevation  z轴阴影的最大高度值-->mCardView.setMaxCardElevation(float);<!--card_view:cardUseCompatPadding  是否给CardView这个控件设置内边距 API>=21-->mCardView.setUseCompatPadding(boolean);<!--card_view:cardPreventCornerOverlap  是否防止内容和圆角重叠 API<=20-->mCardView.setPreventCornerOverlap(boolean);<!--card_view:contentPadding  内容(子View)的padding-->mCardView.setContentPadding(int,int,int,int)

==爬坑指南==

  1. 在CardView中 android:padding 用于偏移阴影的内容,因此,要设置content(子View)的padding属性,需要在XML文件设置card_view:contentPadding或代码中使用setContentPadding(int,int,int,int).

  2. 如果您为CardView指定了精确尺寸,因为阴影其内容区域在Lollipop之前和之后的平台之间不同.我们可以通过使用api版本特定的资源值避免这些更改.

  3. 如果希望CardView在平台Lollipop上添加内部填充,可以调用setUseCompatPadding(true).

  4. 为了兼容星要用setCardElevation,如果直接使用setElevation,5.0之前的版本,系统会出错(api<21没有阴影效果,我们可以自己模仿写一个自定义控件实现类似效果)

  5. 在低版本中设置了Elevation之后CardView会自动留出空间供阴影显示,而Android 5.0之后需要手动设置Margin边距来预留空间,因此如果设置Elevation稍大,4.0系统的边距会显得很大,显示效果不好

解决:创建/res/value 和/res/value-21 资源文件1./res/value 设置dimens.xml文件,参数设为0
<dimen name="cardview_margin">0dp</dimen>2./res/value-21 设置dimens.xml文件,参数按需设置
<dimen name="cardview_margin">5dp</dimen> 3.在布局文件的CardView控件加上该属性
android:layout_margin="@dimen/cardview_margin"

Genymotion模拟器 测试得到的一些奇怪现象

Api<20(Android 4.4)模拟器测试

  • 静态设置card_view:cardElevation有效果,动态设置mCardView.setCardElevation(float)没效果

  • 静态设置card_view:cardMaxElevation,效果类似给CardView设置了andorid:layout_magin属性

  • 如果card_view:cardCornerRadius设置过大,content(子View)会覆盖CardView,设置card_view:cardPreventCornerOverlap=”true”后,content(子View)会自动适配CardView,保持居中显示内容

  • 设置了card_view:cardUseCompatPadding没效果,设置card_view:MaxElevation可以实现它的效果

  • 动态设置了mCardView.setRadius(float);子View内容会自动适配CardView


Api>20 (Android 5.0+)模拟器测试

  • 静态设置card_view:cardMaxElevation有反应,动态设置没反应(要同时设置cardUseCompatPadding=”true”才行)

  • 如果card_view:cardCornerRadius和mCardView.setRadius(float);设置过大,CardView会覆盖content(子View)

总结

  • 实际开发中,在真机测试时,注意下我在Genymotion上遇到的现象,代码动态设置和XML静态设置有什么不同,如果觉得Google提供的CardView 奇怪的bug略多,或者满足不了自己的开发需要,强烈建议同学们自行自定义控件

本篇文章到此结束,欢迎关注,后续有补充的会即时更新,有问题也欢迎评论,共同成长

CardView详解相关推荐

  1. Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载

    为什么80%的码农都做不了架构师?>>>    随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 M ...

  2. Android开发-CardView卡片View的详解,头条三面技术四面HR

    CardView一般用于需要显示阴影效果的UI,此外CardView还提供了圆角的功能.(嘿嘿,这东西还能直接设置成圆形,可以简单的弄成圆形View).CardView其实本身是使用FrameLayo ...

  3. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  4. android gridview控件使用详解_作为Android 开发者该如何进阶?

    经常在简书和微信上收到一些同学的私信,说自己马上毕业或者已经毕业一年,从事Android开发相关的工作,现在不知道要学习什么东西了.或者说自己也在摸索着学习,但是不知道学习的路线对不对,感觉很迷茫,想 ...

  5. 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高...

    第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...

  6. PopupWindow 使用详解(二) Popwindow 制作常见花哨效果

    帝都几日降温,终于被撂倒了.but 只要一息尚存就得不断进步!于是,写出 <PopupWindow 使用详解>的第二篇 笔记,先奉上 第一篇链接: <PopupWindow 使用详解 ...

  7. Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

    Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高 ...

  8. MUI框架详解-全面讲解MUI框架使用

    课程目录: 01MUI 介绍.新项目创建. 基础布局.mp4 02MUI - accordion(折叠面板).button.mp4 03MUI - actionsheet(操作表).badge.mp4 ...

  9. 从命令行到IDE,版本管理工具Git详解(远程仓库创建+命令行讲解+IDEA集成使用)

    首先,Git已经并不只是GitHub,而是所有基于Git的平台,只要在你的电脑上面下载了Git,你就可以通过Git去管理"基于Git的平台"上的代码,常用的平台有GitHub.Gi ...

最新文章

  1. php数据库查询中文方块,解决Python数据可视化中文部分显示方块问题
  2. php定时删除目录,shell定时删除指定目录下的文件
  3. CentOS 6.3下源码安装LAMP(Linux+Apache+Mysql+Php)环境
  4. 转:linux的源码查看, c++语法 查看网站
  5. 获取系统URL访问的前三名(通过Scala方式实现/通过Spark方式实现),Spark将URL访问日志进行分类并通过自定义Partitioner的方式将文件写入到不同分区上
  6. 查看当前机器.net 版本的方法
  7. 30万手表推荐_今年六十岁生日,儿子说要送只30万的手表,请问有哪些推荐?...
  8. NET问答: 如何从 event 中移除所有的 handler ?
  9. vscode代码运行时间工具_10款实用的VSCode插件提升你的编辑体验 | 第98期
  10. 【视野】阿里达摩院做AI这两年
  11. 拓端tecdat|R语言NLP案例:LDA主题文本挖掘优惠券推荐网站数据
  12. java解决中文乱码的几种写法
  13. PHP 数组获取最后一个值
  14. layui横向时间线_除了性能“铁三角”还有什么?iQOO 3全新横向线性马达上手体验...
  15. 学习Python制作的智能小车
  16. 某连锁酒店集团实行积分奖励计划,会员每次入住集团旗下酒店均可以获得一定积分,积分由欢迎积分加消费积分构成。其中欢迎积分跟酒店等级有关,具体标准如表2-1所示;消费积分跟每次入住消费金额有关,具体标准为
  17. 发国外邮件用什么企业邮箱?在国外用什么邮箱稳定呢?
  18. 每个人都可以用的开源微信机器人
  19. 【无线路由器加密 预防邻居盗网】
  20. Qt编写数据可视化大屏界面电子看板系统

热门文章

  1. 一款强大的Android网络渗透软件dsploit
  2. Java用(函数)方法验证哥德巴赫猜想(Goldbach)(一个偶数一定等于两个素数之和)本题以100以内的偶数为例
  3. 如何将代码托管到github上
  4. linux 添加虚拟主机,linux 基于ip虚拟主机(linux搭建虚拟主机)
  5. k8s-node添加Taint
  6. kernel taint
  7. excel 排名(学生成绩)
  8. 百度地图开发之自定义大头针
  9. stm32经典笔试题_经典面试题及解析
  10. java学习代码02 范围:方法、方法递归、面向对象、static和this关键字、多态