第一步:导入依赖:recycleview和cardview
compile 'com.android.support:recyclerview-v7:24.2.1' compile 'com.android.support:cardview-v7:24.2.1' compile 'com.android.support:appcompat-v7:24.2.1'第二部:xml中recycleview和cardview(item)
<android.support.v7.widget.RecyclerView android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/title" android:id="@+id/recycleView"></android.support.v7.widget.RecyclerView>
cardview:
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" app:cardBackgroundColor="#ffffff" android:layout_width="match_parent" android:layout_height="match_parent"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:textColor="#9b9b9b" android:textSize="15.0sp" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_marginLeft="20dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Cisco" android:id="@+id/text"/> <ImageView android:id="@+id/wifiLeve" android:layout_centerVertical="true" android:layout_alignParentRight="true" android:layout_marginRight="20dp" android:layout_width="22dp" android:layout_height="15dp" android:background="@drawable/one" /> </RelativeLayout> </android.support.v7.widget.CardView>
第三部:cardview的属性
android:cardCornerRadius 在xml文件中设置card圆角的大小 CardView.setRadius 在代码中设置card圆角的大小 android:cardBackgroundColor 在xml文件中设置card背景颜色 android:elevation 在xml文件中设置阴影的大小 card_view:cardElevation 在xml文件中设置阴影的大小 card_view:cardMaxElevation 在xml文件中设置阴影最大高度 card_view:cardCornerRadius 在xml文件中设置卡片的圆角大小 card_view:contentPadding 在xml文件中设置卡片内容于边距的间隔 card_view:contentPaddingBottom 在xml文件中设置卡片内容于下边距的间隔 card_view:contentPaddingTop 在xml文件中设置卡片内容于上边距的间隔 card_view:contentPaddingLeft 在xml文件中设置卡片内容于左边距的间隔 card_view:contentPaddingRight 在xml文件中设置卡片内容于右边距的间隔 card_view:contentPaddingStart 在xml文件中设置卡片内容于边距的间隔起始 card_view:contentPaddingEnd 在xml文件中设置卡片内容于边距的间隔终止 card_view:cardUseCompatPadding 在xml文件中设置内边距,V21+的版本和之前的版本仍旧具有一样的计算方式 card_view:cardPreventConrerOverlap 在xml文件中设置内边距,在V20和之前的版本中添加内边距,这个属性为了防止内容和边角的重叠
- 第四部分:recycleview adapter
package com.jdhr.crowdfunds.activitygovern;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.TextView;
import com.jdhr.crowdfunds.R;
import java.util.List;
/**
* Created by Administrator on 2017/4/13.
*/
public class RecycleviewAdapter extends RecyclerView.Adapter<RecycleviewAdapter.MyViewholder>implements View.OnClickListener{
List<String> mList;
Context mContext;
//定义一个点击事件的接口
public static interface onRecycleviewItemClickListener {
void onItemClick(View view , String data);
}
private onRecycleviewItemClickListener mOnItemClickListener = null;
public void setOnItemClickListener(onRecycleviewItemClickListener listener) {
this.mOnItemClickListener = listener;
}
public RecycleviewAdapter(List<String> allWifi, Context mContext) {
this.mList = allWifi;
this.mContext = mContext;
}
//item的点击事件
@Override
public void onClick(View view) {
if (mOnItemClickListener != null) {
//注意这里使用getTag方法获取数据
mOnItemClickListener.onItemClick(view,(String) view.getTag());
}
}
class MyViewholder extends RecyclerView.ViewHolder{
TextView actionName;
public MyViewholder(View itemView) {
super(itemView);
actionName= (TextView) itemView.findViewById(R.id.text);
}
}
@Override
public RecycleviewAdapter.MyViewholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= LayoutInflater.from(mContext).inflate(R.layout.item_recycleview,null);
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
WindowManager wm = (WindowManager)mContext
.getSystemService(Context.WINDOW_SERVICE);
int width = wm.getDefaultDisplay().getWidth();
int height = wm.getDefaultDisplay().getHeight();
lp.width=width/2;
view.setLayoutParams(lp);
//为item设置点击事件
view.setOnClickListener(this);
MyViewholder viewholder=new MyViewholder(view);
return viewholder;
}
@Override
public void onBindViewHolder(MyViewholder holder, int position) {
View view=holder.itemView;
if(view==null){
Log.e("获取到的view为空","------");
}else {
Log.e("获取到的不view为空","------");
}
ViewGroup.LayoutParams myLayoutParams=holder.itemView.getLayoutParams();
if(myLayoutParams==null){
Log.e("layoutparams为空","layoutparams为空");
}else {
Log.e("layoutparams不为空","layoutparams为空");
}
//将数据保存在itemview的tag中
holder.itemView.setTag(mList.get(position));
holder.actionName.setText(mList.get(position));
}
@Override
public int getItemCount() {
return mList.size();
}
}
第五部分:recycleview的item间距
public class RecycleviewItem extends RecyclerView.ItemDecoration{
private int space;
public RecycleviewItem(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.left = space;
outRect.right = space;
outRect.bottom = space;
if(parent.getChildPosition(view) != 0){
outRect.top = space;
}
}
}
调用: LinearLayoutManager linearLayoutManager=new LinearLayoutManager(this);
linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//设置水平
recycleview.setLayoutManager(linearLayoutManager);
recycleview.addItemDecoration(new RecycleviewItem(5));
MRecycleViewAdapter adapter=new MRecycleViewAdapter(list,getApplicationContext());
recycleview.setAdapter(adapter);
adapter.setOnItemClickListener(new MRecycleViewAdapter.onRecycleviewItemClickListener() {
@Override
public void onItemClick(View view, String data) {
}
});
附加:cardview的操作
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
cardBackgroundColor属性指定CardView的背景色;
cardCornerRadius属性指定作为边框的圆角矩形的半径;
cardElevation是阴影大小,MAX~~是最大阴影大小;
cardUseCompatPadding compat一般是为了兼容设备,保持一样的外观,所以这里就是保持内边距的计算方式一样;
cardPreventCornerOverlap属性是为了防止卡片内容和边角的重叠;