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;
}
}
}
代码运行结果:
来源: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