用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用于在可滚动 ...
随机推荐
- JavaScript之原型链与原型链继承
原型链 定义:每个实例对象(object)都有一个私有属性(称之为 __proto__ )指向它的构造函数的原型对象(prototype).该原型对象也有一个自己的原型对象(__proto__),层层 ...
- vue中router与route区别
1.$route对象 $route对象表示当前的路由信息,包含了当前 URL 解析得到的信息.包含当前的路径,参数,query对象等. 1. $route.path 字符串,对应当前路 ...
- 集合remove()方法相关问题
学习集合的过程中,了解到一个有关于remove()方法的有关特性,特此记录 首先remove方法的格式: collection.remove(Object o); 这是指对集合collection内的 ...
- SP419/422 TRANSP(2) - Transposing is Fun
首先可以发现转置本质上就是一个置换,问题就转化为求一个排列排成有序的最少次数. 这是一个经典问题,答案为点数减循环置换的个数,考虑如何求循环置换. 发现有两个特殊性质:置换为转置,矩阵的边长为 \(2 ...
- AT2274 [ARC066D] Contest with Drinks Hard
先考虑不修改怎么做,可以令 \(dp_i\) 表示前 \(i\) 个题能获得的最大得分.那么我们有转移: \[dp_i = \min\{dp_{i - 1}, dp_{j} + \frac{(i - ...
- 深入epoll
转载请注明来源:https://www.cnblogs.com/hookjc/ 一. 介绍Epoll 是一种高效的管理socket的模型,相对于select和poll来说具有更高的效率和易用性.传统的 ...
- FileOutStream
import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...
- MySQL-MMM高可用架构
MySQL-MMM高可用架构 目录 MySQL-MMM高可用架构 一.MMM 1. MMM的概述 2. MMM的应用场景 3. MMM的特点 4. 关于MMM高可用架构的说明 5. 用户及授权 二.案 ...
- 使用纯swift代码文件制作framework
因为最近我们公司的一个客户要求我们使用swift编写程序并且将API封装成framework的形式提供给他们,所以我就开始了swift实践之路. 程序编写完之后,我就琢磨怎么封装成framework的 ...
- uni-app、Vue3 + ucharts 图表 H5 无法渲染
文章已收录到 github,欢迎 Watch 和 Star. 简介 从问题定位开始,到给框架(uni-app)提 issue.出解决方案(PR),再到最后的思考,详细记录了整个过程. 前序 当你在业务 ...