与ViewPager类似的一个滑动的高级控件是RecyclerView,使用更加灵活。
第1步:添加依赖
打开mvn官网,检索recyclerview,选择使用人数较多的版本,复制依赖,放入项目中即可
快捷方法(复制下面的代码)
runtimeOnly("androidx.recyclerview:recyclerview:1.2.1")
第2步:使用RecyclerView控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="200dp"android:background="#2196F3"/>
</LinearLayout>
我是为了观察该控件有多大,所以设置了一个背景颜色,如果你关注的是功能,这句可以省略
第3步:新建一个条目布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="测试"android:background="#00BCD4"/>
</LinearLayout>
第4步:逻辑文件
package com.yibinu.demo;import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;import android.os.Bundle;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {//1.声明属性RecyclerView recyclerView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//2.绑定组件recyclerView = findViewById(R.id.recyclerView);//5.设置RecyclerView的布局管理器(必须设置!)/*** 常见的布局管理器:LinearLayoutManager、GridLayoutManager等*/recyclerView.setLayoutManager(new LinearLayoutManager(this));//4.造数据(条目上需要显示的数据)List<String> list = new ArrayList<>();for (int i = 1; i <= 10; i++) {list.add("测试"+i);}//4.关联的适配器没有现成的,所以需要自定义,由于条目布局中只有一个TextView,所以把所有的条目上需要显示的文字都放在一个List结构中MyAdapter adapter = new MyAdapter(list);//3.关联适配器recyclerView.setAdapter(adapter);}
}
编程思路是:声明属性、绑定组件、设置适配器,根据适配器所需造数据、最后不要忘记了,还要设置布局管理器。
一般RecyclerView都是使用自定义的适配器
于是创建MyAdapter 自定义的适配器,需要继承RecyclerView.Adapter,其余的内容就自己写了,通常,为了提高列表的性能,会使用ViewHolder
自定义适配器:
package com.yibinu.demo;import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;import java.util.List;public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {private List<String> list;public MyAdapter(List<String> list){this.list = list;}@NonNull@Overridepublic MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {LayoutInflater inflater = LayoutInflater.from(parent.getContext());View view = inflater.inflate(R.layout.item, parent, false);return new MyViewHolder(view);}@Overridepublic void onBindViewHolder(@NonNull MyViewHolder holder, int position) {holder.textView.setText(list.get(position));}@Overridepublic int getItemCount() {return list.size();}public class MyViewHolder extends RecyclerView.ViewHolder {private TextView textView;public MyViewHolder(@NonNull View itemView) {super(itemView);textView = itemView.findViewById(R.id.textView);}}
}
效果:
recyclerview基本效果
如果想要设置为水平方向滚动,则可以 修改布局管理器参数为水平方向
recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.HORIZONTAL,false));
效果:
recyclerview水平效果
布局管理器不仅仅是可以用来控制方向,还可以使用其他的布局管理器,实现各种排版,然后同样具有可以滚动的效果
例如:使用
GridLayoutManager layout = new GridLayoutManager(this, 3,LinearLayoutManager.HORIZONTAL,false);recyclerView.setLayoutManager(layout);
效果:
recyclerview 网格布局管理器 水平效果
如果把方向改为垂直方向,则效果如下:
recyclerview 网格布局管理器 垂直效果
从以上可以看出,该控件比较灵活,造好数据后,可以根据需要,自由结合布局管理器实现各种展示效果。