Android RecyclerView实现水平、垂直方向分割线

作者:zhangphil 时间:2023-07-24 15:40:35 

android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现RecyclerView的水平/垂直分割线,则需要继承自RecyclerView.ItemDecoration重写getItemOffsets方法,从而增加水平/垂直分割线。

写一个例子。

MainActivity.Java:


package zhangphil.app;

import android.content.Context;
import android.graphics.Color;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.StaggeredGridLayoutManager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override
 protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);

RecyclerView mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView);

// 两列
   int spanCount = 2;

// StaggeredGridLayoutManager管理RecyclerView的布局。
   StaggeredGridLayoutManager mLayoutManager = new StaggeredGridLayoutManager(spanCount, StaggeredGridLayoutManager.VERTICAL);
   mRecyclerView.setLayoutManager(mLayoutManager);

//为RecyclerView增加分割线,水平和垂直方向都有。增加分割线值比如为32。
   RecyclerViewItemDecoration decoration = new RecyclerViewItemDecoration(32);
   mRecyclerView.addItemDecoration(decoration);

RecyclerViewAdapter mAdapter = new RecyclerViewAdapter(this);
   mRecyclerView.setAdapter(mAdapter);
 }

private class ItemViewHolder extends RecyclerView.ViewHolder {
   private TextView text;

public ItemViewHolder(View itemView) {
     super(itemView);
     text = (TextView) itemView.findViewById(android.R.id.text1);
     text.setTextColor(Color.WHITE);
   }
 }

public class RecyclerViewAdapter extends RecyclerView.Adapter<ItemViewHolder> {
   private Context context;

public RecyclerViewAdapter(Context context) {
     super();
     this.context = context;
   }

@Override
   public ItemViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
     View view = View.inflate(context, android.R.layout.simple_list_item_1, null);
     view.setBackgroundColor(Color.RED);
     ItemViewHolder holder = new ItemViewHolder(view);
     return holder;
   }

@Override
   public void onBindViewHolder(ItemViewHolder viewHolder, int pos) {
     viewHolder.text.setText(String.valueOf(pos));
   }

@Override
   public int getItemCount() {
     return 15;
   }
 }
}

布局文件,很简单,就放一个RecyclerView,注意背景颜色的设置:


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:background="@android:color/holo_orange_light">

<android.support.v7.widget.RecyclerView
   android:id="@+id/recyclerView"
   android:layout_width="match_parent"
   android:layout_height="match_parent">
 </android.support.v7.widget.RecyclerView>

</RelativeLayout>

最关键的RecyclerViewItemDecoration.java:


package zhangphil.app;

/**
* Created by Phil on 2016/10/8.
*/

import android.graphics.Rect;
import android.support.v7.widget.RecyclerView;
import android.view.View;

/**
* 为RecyclerView增加间距
* 预设2列,如果是3列,则左右值不同
*/
public class RecyclerViewItemDecoration extends RecyclerView.ItemDecoration {
 private int space = 0;
 private int pos;

public RecyclerViewItemDecoration(int space) {
   this.space = space;
 }

@Override
 public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {

outRect.top = space;

//该View在整个RecyclerView中位置。
   pos = parent.getChildAdapterPosition(view);

//取模

//两列的左边一列
   if (pos % 2 == 0) {
     outRect.left = space;
     outRect.right = space / 2;
   }

//两列的右边一列
   if (pos % 2 == 1) {
     outRect.left = space / 2;
     outRect.right = space;
   }
 }
}

代码运行结果:

Android RecyclerView实现水平、垂直方向分割线

来源:http://blog.csdn.net/zhangphil/article/details/52757862

标签:Android,RecyclerView,分割线
0
投稿

猜你喜欢

  • 分享Java常用开发编辑器工具

    2023-11-06 07:35:37
  • Android定时器和Handler用法实例分析

    2022-11-09 22:18:08
  • Java Maven构建工具中mvnd和Gradle谁更快

    2022-02-15 04:39:52
  • C#串口编程System.IO.Ports.SerialPort类

    2023-06-07 17:48:28
  • C#位运算以及实例计算详解

    2021-06-03 09:03:20
  • Springboot自带定时任务实现动态配置Cron参数方式

    2023-11-10 10:21:31
  • Android实现捕获未知异常并提交给服务器的方法

    2022-07-15 23:49:29
  • Android控件之SeekBar的用法总结

    2022-10-25 00:15:38
  • 详解Unity安卓共享纹理

    2022-07-10 08:18:21
  • SpringDataJPA在Entity中常用的注解介绍

    2023-11-27 09:40:36
  • java并发编程专题(六)----浅析(JUC)Semaphore

    2023-07-27 23:30:28
  • Java深入探究Object类的方法

    2022-11-24 06:48:53
  • Kotlin利用Regex如何构建正则表达式详解

    2022-12-25 18:31:10
  • SpringBoot防止大量请求攻击的实现

    2023-11-24 16:42:54
  • java中如何获取时间戳的方法实例

    2021-06-14 15:29:16
  • 详解spring boot集成ehcache 2.x 用于hibernate二级缓存

    2023-06-25 05:49:44
  • android中Glide实现加载图片保存至本地并加载回调监听

    2021-12-05 23:00:03
  • 如何自定义hibernate validation注解示例代码

    2021-08-31 12:05:51
  • Java基础教程之理解Annotation详细介绍

    2022-02-28 10:07:12
  • C#中ArrayList的使用方法

    2023-01-26 10:20:47
  • asp之家 软件编程 m.aspxhome.com