与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.RecyclerView
android: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">
<TextView
android: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;
@Override
protected 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
@Override
public 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);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.textView.setText(list.get(position));
}
@Override
public 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 网格布局管理器 垂直效果
从以上可以看出,该控件比较灵活,造好数据后,可以根据需要,自由结合布局管理器实现各种展示效果。