RecyclerView和CardView的使用以及注意
2016-04-25 18:20
323 查看
转载请注明出处
作者:AboutJoke ( http://blog.csdn.net/u013200308 )
原文链接:/article/10209213.html
距离RecyclerView和CardView的出现已经很久了,网上也有很多关于这方面的博客。因为最近自己在项目中用到了Material Design设计规范,所以才第一次接触到了RecyclerView和CardView。在这篇博客中,我将给大家介绍一下RecyclerView和CardView的使用方法以及在使用过程中可能遇到的一些问题。具体的实现将通过一个Demo来进行介绍。
1.使用方法
ListView仅需要设置adapter即可正常使用,而RecyclerView需要
2.ViewHolder
在我们使用ListViewz中,我们经常会使用ViewHolder来进行复用,而在RecyclerView中则直接提供了ViewHolder,我们可以通过继承来使用。
通过以上我们可以发现,RecyclerView正如其命名,只负责对view的回收和复用,其他的一切都交给程序员来实现。这样我们才可以轻松的通过RecyclerView这个控件来实现ListView,GirdView,瀑布流等效果。
1.setLayoutManager
通过这个方法,我们可以很简单的将RecyclerView改造成为Listview,GridView以及瀑布流的形式。例如:
其中StaggeredGridLayoutManager的第二个参数为方向,可设置为VERTICAL和HORIZONTAL。为VERTICAL时表示有多少列,HORIZONTAL则表示有多少行。
2.setItemAnimator
通过这个方法,我们可以为每个item设置添加和删除的动画,官方当然只为我们提供了一种,不过我们可以去自定义或者去GitHub上查找。需要注意的是若要有动画效果,刷新数据集的时候不可以使用notifyDataSetChanged()而要使用notifyItemInserted(position)和notifyItemRemoved(position)。
3.addItemDecoration
该方法可以为每个item之间设置分割线,大家可以通过实现该类的方法来自定义分割线。
4.itemClick与itemLongClick
由于官方并未给出以上两个方法,所以我们只能自己实现。具体实现方法有两种,可以在addOnItemTouchListener中监听手势来实现,也可直接在adapter中去添加回调。这里为大家介绍第二种方法:
注意:监听需要设置给adapter而不是RecyclerView。
需要导入命名空间
cardCornerRadius:设置卡片边角的角度值
cardElevation:设置卡片的阴影
使用过程中设置cardElevation后,在低版本上CardView会留出空间来显现出阴影,而在Lollipop 之后则需要手动设置 Margin 边距来预留空间,否则CardView会挤在一起,因此我们需要为Lollipop之后的版本定义Margin 值:
1.创建 /res/value 和 /res/value-v21 资源文件夹于项目对应目录下,前者放置旧版本或者通用的资源文件,后者放置Lollipop及更高 SDK 版本的资源文件。
2.在文件夹内创建dimens.xml,
3.在布局中使用
通过
Demo下载地址:
https://github.com/AboutJoke/RcDemo
简单的使用介绍就到此为止了,深层次的东西就需要大家自己去挖掘了,同时有任何问题,欢迎和我进行交流。
作者:AboutJoke ( http://blog.csdn.net/u013200308 )
原文链接:/article/10209213.html
距离RecyclerView和CardView的出现已经很久了,网上也有很多关于这方面的博客。因为最近自己在项目中用到了Material Design设计规范,所以才第一次接触到了RecyclerView和CardView。在这篇博客中,我将给大家介绍一下RecyclerView和CardView的使用方法以及在使用过程中可能遇到的一些问题。具体的实现将通过一个Demo来进行介绍。
RecyclerView和CardView的简单介绍
2014年,随着Google推出了全新的设计语言Material Design,还迎来了新的Android支持库v7,其中就包含了RecyclerView和CardView。可在路径sdk\extras\android\support\v7下找到相关的support包,通过导入来进行依赖。RecyclerView
我们为什么要去使用RecyclerView呢?对比我们最常用的ListView,可以发现以下几点:1.使用方法
ListView仅需要设置adapter即可正常使用,而RecyclerView需要
//设置布局管理器 list.setLayoutManager(new LinearLayoutManager(this)); //设置adapter list.setAdapter(adapter) //设置Item增加、移除动画 list.setItemAnimator(new DefaultItemAnimator());
2.ViewHolder
在我们使用ListViewz中,我们经常会使用ViewHolder来进行复用,而在RecyclerView中则直接提供了ViewHolder,我们可以通过继承来使用。
通过以上我们可以发现,RecyclerView正如其命名,只负责对view的回收和复用,其他的一切都交给程序员来实现。这样我们才可以轻松的通过RecyclerView这个控件来实现ListView,GirdView,瀑布流等效果。
CardView
通过CardView我们可以很容易的实现卡片式的布局,当然你也可以使用Drawable、Layout 来实现。但这毕竟需要一定的功底,所以对于不擅长的同学来说,CardView可以轻松满足。RecyclerView和CardView的使用
RecyclerView
RecyclerView的使用偏向于代码方面,因为本人也只是初次接触所以未做深入的了解,详细的使用可以通过这篇博客来了解。/article/1580261.html,下面我只对常用到的方法进行介绍。1.setLayoutManager
通过这个方法,我们可以很简单的将RecyclerView改造成为Listview,GridView以及瀑布流的形式。例如:
//线性布局管理器 list.setLayoutManager(new LinearLayoutManager(this)); //网格布局管理器 list.setLayoutManager(new GridLayoutManager(this,2)); //瀑布流布局管理器 list.setLayoutManager(new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL));
其中StaggeredGridLayoutManager的第二个参数为方向,可设置为VERTICAL和HORIZONTAL。为VERTICAL时表示有多少列,HORIZONTAL则表示有多少行。
2.setItemAnimator
通过这个方法,我们可以为每个item设置添加和删除的动画,官方当然只为我们提供了一种,不过我们可以去自定义或者去GitHub上查找。需要注意的是若要有动画效果,刷新数据集的时候不可以使用notifyDataSetChanged()而要使用notifyItemInserted(position)和notifyItemRemoved(position)。
3.addItemDecoration
该方法可以为每个item之间设置分割线,大家可以通过实现该类的方法来自定义分割线。
4.itemClick与itemLongClick
由于官方并未给出以上两个方法,所以我们只能自己实现。具体实现方法有两种,可以在addOnItemTouchListener中监听手势来实现,也可直接在adapter中去添加回调。这里为大家介绍第二种方法:
private OnItemClickListener mOnItemClickListener; private OnItemLongClickListener mOnItemLongClickListener; public interface OnItemClickListener { void OnItemClick(View view, int position); } public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) { this.mOnItemClickListener = mOnItemClickListener; } public interface OnItemLongClickListener { void OnItemLongClick(View view, int position); } public void setOnItemLongClickListener(OnItemLongClickListener mOnItemLongClickListener) { this.mOnItemLongClickListener = mOnItemLongClickListener; } @Override public void onBindViewHolder(final RecyclerViewAdapter.ViewHolder holder, int position) { //设置点击事件 if (mOnItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickListener.OnItemClick(holder.itemView, pos); } }); } //设置长按事件 if (mOnItemLongClickListener != null) { holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition(); mOnItemLongClickListener.OnItemLongClick(v, pos); return true; } }); } }
注意:监听需要设置给adapter而不是RecyclerView。
CardView
CardView使用比较简单,xml代码如下:<android.support.v7.widget.CardView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_margin="@dimen/card_margin" card_view:cardCornerRadius="2dp" card_view:cardElevation="4dp" android:foreground="?attr/selectableItemBackground"> </android.support.v7.widget.CardView>
需要导入命名空间
xmlns:card_view="http://schemas.android.com/apk/res-auto"
cardCornerRadius:设置卡片边角的角度值
cardElevation:设置卡片的阴影
使用过程中设置cardElevation后,在低版本上CardView会留出空间来显现出阴影,而在Lollipop 之后则需要手动设置 Margin 边距来预留空间,否则CardView会挤在一起,因此我们需要为Lollipop之后的版本定义Margin 值:
1.创建 /res/value 和 /res/value-v21 资源文件夹于项目对应目录下,前者放置旧版本或者通用的资源文件,后者放置Lollipop及更高 SDK 版本的资源文件。
2.在文件夹内创建dimens.xml,
<dimen name="card_margin">4dp</dimen>填入你期望的值。
3.在布局中使用
android:layout_margin="@dimen/card_margin"。
通过
android:foreground="?attr/selectableItemBackground"可以为CardView设置点击效果,在高版本上为Ripple效果,低版本则为变深到变亮的过程。
RecyclerView和CardView的结合使用Demo
Demo下载地址:
https://github.com/AboutJoke/RcDemo
简单的使用介绍就到此为止了,深层次的东西就需要大家自己去挖掘了,同时有任何问题,欢迎和我进行交流。
相关文章推荐
- scala入门3
- hdu 3507 Print Article(斜率优化DP)
- 也许,DOM 不是答案(手机APP页面开发的思考)
- 我的第一篇博客
- linux bash shell之declare
- sds
- HDU 5620 KK's Steel(思维题)
- STL学习_SGI空间配置器
- LBS(定位)的使用
- Java中Vector和ArrayList的区别
- redis sentinel(哨兵)模式
- Java多线程系列--“基础篇”03之 Thread中start()和run()的区别
- Android开发本地及网络Mp3音乐播放器(七)循环模式与专辑倒影
- Android开发本地及网络Mp3音乐播放器(七)循环模式与专辑倒影
- svn ignore 的用法(忽略文件及目录)
- UVA 10341 Solve It (二分)
- UIColor 使用起来的坑
- Android开发面试经——4.常见Android进阶笔试题(更新中...)
- char与varchar、nvarchar区别
- MySQL定时执行脚本(计划任务)命令实例