RecyclerView как шахматная сетка в Android с примером

Опубликовано: 1 Декабря, 2021

GridView: ViewGroupt, который показывает элементы в двумерной прокручиваемой сетке. В представлении сетки каждая сетка имеет одинаковый размер, т.е. высота и ширина каждой сетки равны. Он показывает симметричные элементы на видах.

Staggered GridView: эта ViewGroup является расширением Grid View. В этом представлении сетки имеют разный размер, т.е. их высота и ширина могут различаться. На видах отображаются асимметричные элементы. Он автоматически устанавливает вид элемента в соответствии с его высотой и шириной.

Чтобы использовать RecyclerView для создания потрясающих представлений сетки, нам нужно использовать StaggeredGridLayoutManager. LayoutManager отвечает за измерение и позиционирование представлений элементов в RecyclerView, а также перезапускает представления элементов, когда они больше не видны пользователю. Есть три типа встроенных менеджеров по расположению.

  1. LinearLayoutManager: используется для отображения представлений элементов в вертикальном и горизонтальном списке.
  2. GridLayoutManager: используется для отображения представлений сетки представлений элементов.
  3. StaggeredLayoutManager: используется для отображения представлений элементов в шахматном порядке.

Мы также можем создать собственный менеджер компоновки с помощью класса RecyclerView.LayoutManager.

StaggeredGridLayoutManager (int spanCount, ориентация int)

  • Создает шахматный макет сетки с заданными параметрами
  • Первый параметр, spanCount, используется для установки количества столбцов в вертикальной ориентации или количества строк в горизонтальной ориентации.
  • Второй параметр, ориентация, используется для установки вертикальной или горизонтальной ориентации.

Ступенчатая сетка с вертикальной ориентацией

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerView);

// staggeredGridLayoutManager with 3 columns and vertical orientation

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, LinearLayoutManager.VERTICAL);

// setting recycler view layout to staggered grid

recyclerView.setLayoutManager(staggeredGridLayoutManager);
 



Ступенчатая сетка с горизонтальной ориентацией

RecyclerView recyclerView = (RecyclerView)findViewById(R.id.recyclerView);

// staggeredGridLayoutManager with 3 rows and horizontal orientation

StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3, LinearLayoutManager.HORIZONTAL);

// setting recycler view layout to staggered grid

recyclerView.setLayoutManager(staggeredGridLayoutManager);
 

Пример

В этом примере мы будем хранить данные в ArrayList, который используется для заполнения RecyclerView. После этого мы установили диспетчер компоновки RecyclerView в виде шахматной сетки, а затем мы установили адаптер для RecyclerView для отображения представлений элементов. Ниже приведен образец GIF, чтобы понять, что мы собираемся делать в этой статье. Обратите внимание, что мы собираемся реализовать этот проект на языке Java.

Пошаговая реализация

Шаг 1. Создайте новый проект

Чтобы создать новый проект в Android Studio, обратитесь к разделу «Как создать / запустить новый проект в Android Studio». Обратите внимание, что выберите Java в качестве языка программирования.

Шаг 2. Добавление зависимостей

Мы собираемся использовать RecyclerView. Итак, нам нужно добавить его зависимость. Для добавления зависимости Перейдите в Gradle Scripts> build.gradle (Module: app) и добавьте следующие зависимости. После добавления этих зависимостей вам нужно нажать « Синхронизировать сейчас» .

dependencies {

  implementation ‘androidx.recyclerview:recyclerview:1.1.0’

}

Прежде чем двигаться дальше, давайте добавим несколько цветовых атрибутов, чтобы улучшить панель приложения. Перейдите в app> res> values> colors.xml и добавьте следующие атрибуты цвета.

XML

< resources >
< color name = "colorPrimary" >#0F9D58</ color >
< color name = "colorPrimaryDark" >#16E37F</ color >
< color name = "colorAccent" >#03DAC5</ color >
</ resources >

Шаг 3. Работа с файлом activity_main.xml

На этом этапе мы создадим макет RecyclerView в файле activity_main.xml. Перейдите в app> res> layout> activity_main.xml и добавьте следующий фрагмент кода.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout
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 = "match_parent" />
</ RelativeLayout >

Шаг 4. Создайте новый файл макета list_item.xml для элементов списка RecyclerView

Перейдите в приложение> res> layout> щелкните правой кнопкой мыши> New> Layout Resource File и назовите его list_item. Файл макета list_item.xml содержит ImageView, который используется для заполнения строк RecyclerView.

XML

<? xml version = "1.0" encoding = "utf-8" ?>
< RelativeLayout
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:layout_margin = "4dp" >
<!--For image src we have used ic_launcher
it is used only for reference how it will look"-->
< ImageView
android:id = "@+id/imageView"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
android:scaleType = "fitXY"
android:src = "@mipmap/ic_launcher" />
</ RelativeLayout >

Шаг 5: Создание класса адаптера для RecyclerView

Теперь мы создадим класс Adapter.java , который расширит RecyclerView.Adapter с помощью ViewHolder. Перейдите в приложение> java> пакет> щелкните правой кнопкой мыши и создайте новый класс java и назовите его Адаптер . В классе Adapter мы переопределим метод onCreateViewHolder (), который раздувает макет list_item.xml и передает его в View Holder. Затем метод onBindViewHolder (), в котором мы устанавливаем данные в представления с помощью держателя представления. Ниже приведен фрагмент кода для класса Adapter.java.

Ява

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
// Extends the Adapter class to RecyclerView.Adapter
// and implement the unimplemented methods
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {
ArrayList images;
Context context;
// Constructor for initialization
public Adapter(Context context, ArrayList images) {
this .context = context;
this .images = images;
}
@NonNull
@Override
public Adapter.ViewHolder onCreateViewHolder( @NonNull ViewGroup parent, int viewType) {
// Inflating the Layout(Instantiates list_item.xml layout file into View object)
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, parent, false );
// Passing view to ViewHolder
Adapter.ViewHolder viewHolder = new Adapter.ViewHolder(view);
return viewHolder;
}
// Binding data to the into specified position
@Override
public void onBindViewHolder( @NonNull Adapter.ViewHolder holder, int position) {
// TypeCast Object to int type
int res = ( int ) images.get(position);
holder.images.setImageResource(res);
}
@Override
public int getItemCount() {
// Returns number of items currently available in Adapter
return images.size();
}
// Initializing the Views
public class ViewHolder extends RecyclerView.ViewHolder {
ImageView images;
public ViewHolder(View view) {
super (view);
images = (ImageView) view.findViewById(R.id.imageView);
}
}
}

Шаг 6: Работа с файлом MainActivity.java

В классе MainActivity.java мы создаем ArrayList для хранения изображений. Эти изображения помещаются в папку для рисования ( app> res> drawable ). Вы можете использовать любые изображения вместо них. Затем мы получаем ссылку RecyclerView и устанавливаем LayoutManager как StaggeredGridLayoutManager и Adapter, чтобы отображать элементы в RecyclerView. Ниже приведен код файла MainActivity.java.

Ява

import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.StaggeredGridLayoutManager;
import java.util.ArrayList;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
// Using ArrayList to store images data
ArrayList images = new ArrayList<>(Arrays.asList(R.drawable.img_1, R.drawable.img_2, R.drawable.img_3,
R.drawable.img_4, R.drawable.img_5, R.drawable.img_6, R.drawable.img_7, R.drawable.img_8,
R.drawable.img_9, R.drawable.img_10));
@Override
protected void onCreate(Bundle savedInstanceState) {
super .onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Getting reference of recyclerView
recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
// Setting the layout as Staggered Grid for vertical orientation
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager( 2 , LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
// Sending reference and data to Adapter
Adapter adapter = new Adapter(MainActivity. this , images);
// Setting Adapter to RecyclerView
recyclerView.setAdapter(adapter);
}
}

Выход: запустить на эмуляторе

Хотите более динамичную и конкурентную среду для изучения основ Android?
Щелкните здесь, чтобы перейти к уникальному руководству, составленному нашими экспертами с целью мгновенно подготовить вашу отрасль!