用RecyclerView实现水平滚动和网格视图
建立RecyclerViewActivity.java文件
1 public class RecyclerViewActivity extends AppCompatActivity {
2 private Button BtnLinear;
3 private Button BtnShuiping;
4 private Button BtnGrid;
5 @Override
6 protected void onCreate(Bundle savedInstanceState) {
7 super.onCreate(savedInstanceState);
8 setContentView(R.layout.activity_recycler_view);//遇到R标红问题时import class就好了
9 BtnLinear=findViewById(R.id.btn_linear);
10 BtnShuiping=findViewById(R.id.btn_shuiping);
11 BtnGrid=findViewById(R.id.btn_grid);
12 BtnLinear.setOnClickListener(new View.OnClickListener() {
13 @Override
14 public void onClick(View view) {
15 Intent intent=new Intent(RecyclerViewActivity.this,LinearRecyclerViewActivity.class);
16 startActivity(intent);
17 }
18 });
19 BtnShuiping.setOnClickListener(new View.OnClickListener() {
20 @Override
21 public void onClick(View view) {
22 Intent intent=new Intent(RecyclerViewActivity.this,ShuipRecyclerViewActivity.class);
23 startActivity(intent);
24 }
25 });
26 BtnGrid.setOnClickListener(new View.OnClickListener() {
27 @Override
28 public void onClick(View view) {
29 Intent intent=new Intent(RecyclerViewActivity.this,GridRecyclerViewActivity.class);
30 startActivity(intent);
31 }
32 });
33 }
34 }
对应的activity_recycler_view.xml文件:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="wrap_content"
4 android:orientation="vertical">
5
6 <Button
7 android:id="@+id/btn_linear"
8 android:layout_width="match_parent"
9 android:layout_height="wrap_content"
10 android:text="列表视图">
11 </Button>
12
13 <Button
14 android:id="@+id/btn_shuiping"
15 android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:text="水平滚动"/>
18
19 <Button
20 android:id="@+id/btn_grid"
21 android:layout_width="match_parent"
22 android:layout_height="wrap_content"
23 android:text="网格视图">
24 </Button>
25
26
27 </LinearLayout>
实现水平滚动:
建立ShuipRecyclerViewActivity.java文件:
1 public class ShuipRecyclerViewActivity extends AppCompatActivity {
2 private RecyclerView RVshuip;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_shuip_recycler_view);
7 RVshuip=findViewById(R.id.rv_shuip);
8 LinearLayoutManager linearLayoutManager=new LinearLayoutManager(ShuipRecyclerViewActivity.this);
9 linearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL);//注意linearLayoutManager的开头大小写,注意区分
10 RVshuip.setLayoutManager(linearLayoutManager);
11 RVshuip.addItemDecoration(new MyDecoration());
12 RVshuip.setAdapter(new ShuipAdapter(ShuipRecyclerViewActivity.this, new ShuipAdapter.OnItemClickListener() {
13 @Override
14 public void onClick(int pos) {
15 Toast.makeText(ShuipRecyclerViewActivity.this, "点击"+pos, Toast.LENGTH_SHORT).show();
16 }
17 }));
18 }
19
20 class MyDecoration extends RecyclerView.ItemDecoration {
21 @Override
22 public void getItemOffsets(@NonNull Rect outRect, @NonNull View view, @NonNull RecyclerView parent, @NonNull RecyclerView.State state) {
23 super.getItemOffsets(outRect, view, parent, state);
24 outRect.set(getResources().getDimensionPixelOffset(R.dimen.deviderHeight), 0, 0, 0);
25 }//给列表视图在左面设置分隔线,记得在上面添加RVshuip.setLayoutManager(linearLayoutManager);这句话
26 }
27 }
对应的activity_shuip_recycler_view.xml文件:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent">
4
5 <androidx.recyclerview.widget.RecyclerView
6 android:id="@+id/rv_shuip"
7 android:layout_width="match_parent"
8 android:layout_height="wrap_content"
9 android:background="@color/greydrak"/>
10 </LinearLayout>
建立适配器ShuipAdapter.java文件:
1 public class ShuipAdapter extends RecyclerView.Adapter<ShuipAdapter.LinearViewHolder>{
2 private Context mcontext;
3 private OnItemClickListener mlistener;
4 public ShuipAdapter(Context context, OnItemClickListener listener){
5 this.mcontext=context;
6 this.mlistener=listener;
7 }
8 @NonNull
9 @Override
10 public ShuipAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
11 return new LinearViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.layout_shuip_item,parent,false));
12 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
13
14 @Override
15 public void onBindViewHolder(@NonNull ShuipAdapter.LinearViewHolder holder, int position) {
16 holder.textView.setText("大家好");
17 holder.itemView.setOnClickListener(new View.OnClickListener() {
18 @Override
19 public void onClick(View view) {
20 //Toast.makeText(mcontext, "click...", Toast.LENGTH_SHORT).show();//第一种方法
21 mlistener.onClick(position);//第二种方法,
22 }
23 });//增加点击事件,这是第一种方法
24 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
25
26 @Override
27 public int getItemCount() {
28 return 20;
29 }//设置有多少行
30
31 class LinearViewHolder extends RecyclerView.ViewHolder {
32 private TextView textView;
33 public LinearViewHolder(@NonNull View itemView) {
34 super(itemView);
35 textView=itemView.findViewById(R.id.tv_rtitle);
36 }
37 }
38 public interface OnItemClickListener{
39 void onClick(int pos);
40 }//点击事件的第二种方法,建立接口
41 }
最后是单个元素样式layout_shuip_item.xml文件:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="wrap_content"
3 android:layout_height="wrap_content"
4 android:orientation="vertical"
5 android:background="@color/white"
6 android:padding="10dp">
7
8 <TextView
9 android:id="@+id/tv_rtitle"
10 android:layout_width="wrap_content"
11 android:layout_height="50dp"
12 android:gravity="center"
13 android:textColor="@color/black"
14 android:textSize="20sp"/>
15 </LinearLayout>
水平滚动效果:

实现网格视图:
建立GridRecyclerViewActivity.java文件:
1 public class GridRecyclerViewActivity extends AppCompatActivity {
2 private RecyclerView RVgrid;
3 @Override
4 protected void onCreate(Bundle savedInstanceState) {
5 super.onCreate(savedInstanceState);
6 setContentView(R.layout.activity_grid_recycler_view);
7 RVgrid=findViewById(R.id.rv_grid);
8 RVgrid.setLayoutManager(new GridLayoutManager(GridRecyclerViewActivity.this,3));//3是几列的意思
9 RVgrid.setAdapter(new GridAdapter(GridRecyclerViewActivity.this, new GridAdapter.OnItemClickListener() {
10 @Override
11 public void onClick(int pos) {
12 Toast.makeText(GridRecyclerViewActivity.this, "又点击了"+pos, Toast.LENGTH_SHORT).show();
13 }
14 }));
15 }
16 }
对应的activity_grid_recycler_view.xml文件:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="match_parent"
3 android:layout_height="match_parent">
4 <androidx.recyclerview.widget.RecyclerView
5 android:id="@+id/rv_grid"
6 android:layout_width="match_parent"
7 android:layout_height="wrap_content"/>
8 </LinearLayout>
建立适配器GridAdapter.java文件:
1 public class GridAdapter extends RecyclerView.Adapter<GridAdapter.LinearViewHolder>{
2 private Context mcontext;
3 private OnItemClickListener mlistener;
4 public GridAdapter(Context context, OnItemClickListener listener){
5 this.mcontext=context;
6 this.mlistener=listener;
7 }
8 @NonNull
9 @Override
10 public GridAdapter.LinearViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
11 return new LinearViewHolder(LayoutInflater.from(mcontext).inflate(R.layout.layout_grid_recyclerview_item,parent,false));
12 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
13
14 @Override
15 public void onBindViewHolder(@NonNull GridAdapter.LinearViewHolder holder, int position) {
16 holder.textView.setText("这是啥?!");
17 holder.itemView.setOnClickListener(new View.OnClickListener() {
18 @Override
19 public void onClick(View view) {
20 //Toast.makeText(mcontext, "click...", Toast.LENGTH_SHORT).show();//第一种方法
21 mlistener.onClick(position);//第二种方法,
22 }
23 });//增加点击事件,这是第一种方法
24 }//这里原来是RecyclerView.ViewHolder,建立完LinearViewHolder class后要把它改成LinearAdapter.LinearViewHolder就可以了
25
26 @Override
27 public int getItemCount() {
28 return 21;
29 }//设置有多少个
30
31 class LinearViewHolder extends RecyclerView.ViewHolder {
32 private TextView textView;
33 public LinearViewHolder(@NonNull View itemView) {
34 super(itemView);
35 textView=itemView.findViewById(R.id.tv_rtitle);
36 }
37 }
38 public interface OnItemClickListener{
39 void onClick(int pos);
40 }//点击事件的第二种方法,建立接口
41 }
最后是单个元素样式layout_grid_recyclerview_item.xml文件:
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="wrap_content"
3 android:layout_height="wrap_content"
4 android:orientation="vertical"
5 android:background="@color/white"
6 android:padding="10dp">
7
8 <TextView
9 android:id="@+id/tv_rtitle"
10 android:layout_width="wrap_content"
11 android:layout_height="50dp"
12 android:gravity="center"
13 android:textColor="@color/black"
14 android:textSize="20sp"/>
15 </LinearLayout>
网格视图效果:

用RecyclerView实现水平滚动和网格视图的更多相关文章
- Android TV端的(RecyclerView)水平滚动焦点错乱问题
package com.hhzt.iptv.ui.customview; import android.content.Context;import android.content.res.Typed ...
- Android学习笔记技巧之垂直和水平滚动视图
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android=" ...
- 修复垂直滑动RecyclerView嵌套水平滑动RecyclerView水平滑动不灵敏问题
在 Android 应用中,大部分情况下都会使用一个垂直滚动的 View 来显示内容(比如 ListView.RecyclerView 等).但是有时候你还希望垂直滚动的View 里面的内容可以水平滚 ...
- IOS UIScrollView + UIButton 实现segemet页面和顶部标签页水平滚动效果
很长一段时间没有写博客了,最近在学习iOS开发,看了不少的代码,自己用UIScrollView和UIButton实现了水平滚动的效果,有点类似于今日头条的主界面框架,效果如下: 代码如下: MyScr ...
- Android学习笔记27:网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- Android开发10.3:UI组件GridView网格视图
GridView(网格视图) 概述 GridView用于在界面上按行.列分布的方式来显示多个组件 GridView和ListView有共同的父类 : AbsListView ...
- Android 网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- 网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- 【Android】10.3 网格视图(GridView)
分类:C#.Android.VS2015: 创建日期:2016-02-19 一.简介 网格视图(GridView)是在GridLayout的基础上添加了滚动功能的视图,即:GridView用于在可滚动 ...
随机推荐
- 前端禁止使用F12、禁止右键
打开控制台直接跳转页面 //debug调试时跳转页面 var element = new Image(); Object.defineProperty(element,'id',{get:functi ...
- Java线上问题排查神器Arthas实战分析
概述 背景 是不是在实际开发工作当中经常碰到自己写的代码在开发.测试环境行云流水稳得一笔,可一到线上就经常不是缺这个就是少那个反正就是一顿报错抽风似的,线上调试代码又很麻烦,让人头疼得抓狂:而且deb ...
- 合宙AIR105使用Keil MDK + DAP-Link 烧录和调试
关于AIR105 AIR105是合宙LuatOS生态下的一款芯片, 1月初上市, 开发板与摄像头一起搭售(赠送). 从配置信息看, 芯片性能相当不错: Cortex-M4F内核, 最高频率204Mhz ...
- file类和fileinfo类的简单对比
File类:提供用于操作文件的静态方法. FileInfo类:提供操作文件的属性和实例方法. Directory类:提供用于操作目录的静态方法. DirectoryInfo类:提供用于操作目录的实例方 ...
- AT [ABC176F] Brave CHAIN
首先可以发现这样一个事实:在每次操作当中,都有三张牌是已经固定的,只有两张牌是不确定的,于是我们可以发下每一次操作的状态可以简单的使用这两张牌来描述,于是可以考虑令 \(dp_{i, j, k}\) ...
- 使用Reachability监测网络变化-陈鹏
在appdelegate里面添加观察者,并启动监测 // 使用通知中心监听kReachabilityChangedNotification通知 [[NSNotificationCenter defau ...
- Docker consul的容器服务更新与发现
Docker consul的容器服务更新与发现 目录 Docker consul的容器服务更新与发现 一.Consul简介 1. 服务注册与发现 2. consul概述 3. consul的两种模式 ...
- [01-jwt]C# JWT基础知识详解
本篇文章将介绍jwt基础概念性知识,不含实操代码展示,特别适合该方面知识空白的人群,大神级别请选择性观看.不喜禁喷,出门右转,谢谢配合. 一.什么是JWT? JWT是简写,全称是JSON Web To ...
- 从上下文中获取所有的原生controller
1 /** 2 * 获取项目所有被注解修饰的url 3 * @param run 4 */ 5 public void getAllUrl(ConfigurableApplicationContext ...
- python——schedule库实现定时任务
今天给脚本加定时任务用到一个schedule库,使用起来很简单方便.https://github.com/dbader/schedulehttps://schedule.readthedocs.io/ ...