用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用于在可滚动 ...
随机推荐
- java接口概述及特点
1 package face_09; 2 3 4 5 6 abstract class AbsDemo{ 7 abstract void show1(); 8 abstract void show2( ...
- java-异常-异常应用
1 package p1.exception; 2 3 4 /* 5 * 老师用电脑上课. 6 * 7 * 问题领域中涉及两个对象. 8 * 老师,电脑. 9 * 10 * 分析其中的问题. 11 * ...
- Python如何把八进制转换成ASCII码
做题途中拿到一串八进制字符串 0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 010 ...
- Simulink S-Function的使用(以串口接收MPU6050六轴陀螺仪参数为实例)
S-Function 允许使用自定义C/C++函数作为传递函数,具有可移植性.也可以同样利用MATLAB函数进行相同的运算,看开发者熟悉程度而定. 项目流程 由系统串口接收数据包. 通过S-Funct ...
- Linux 学习2
1.配置好阿里云yum源生成yum缓存下载nginx,并且启动nginx服务,使用浏览器访问,nginx页面 yum源的工作目录是? https://www.cnblogs.com/dlh-lmsh/ ...
- Sweetalert模态对话框与Swiper轮播插件、Bootstrap样式组件、AdminLTE后台管理模板地址
Sweetalert纯JS模态对话框插件地址:http://mishengqiang.com/sweetalert/ AdminLTE后台管理模板系统地址(基于Bootstrap):https://a ...
- java中的数据模型类
package com.aaa.zxf.ajax.test; import java.io.Serializable; /** * java中的继承. * * 一.数据模型类 * 数据模型类:用来存取 ...
- 求一个number数组中的最大值和最小值的差
<!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content ...
- 浅谈C#可变参数params
前言 前几天在群里看到群友写了一个基础框架,其中设计到关于同一个词语可以添加多个近义词的一个场景.当时群友的设计是类似字典的设计,直接添加k-v的操作,本人看到后思考了一下觉得使用c#中的params ...
- ABC182 F Valid payments
解法一 首先不妨来思考一下怎样的一个付钱方案是最优的,假设需要支付 \(Y\) 元,第 \(a_i\) 种钱币支付了 \(s_i\) 张,那么必须有:\(s_i < \frac{a_{i + 1 ...