您的位置:首页 > 其它

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来进行介绍。

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

简单的使用介绍就到此为止了,深层次的东西就需要大家自己去挖掘了,同时有任何问题,欢迎和我进行交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: