Элемент GridView представляет отображение в виде таблицы - набора строк и столбцов.
Основные атрибуты GridView:
android:columnWidth: устанавливает фиксированную ширину столбцов
android:gravity: устанавливает выравнивание содержимого внутри каждой ячейки
android:horizontalSpacing: устанавливает горизональные отступы между столбцами
android:numColumns: устанавливает количество столбцов
android:stretchMode: устанавливает, как столбцы будут растягиваться и занимать пространство контейнера. Может принимать следующие значения:
columnWidth
: каждый столбец растягивается равномерно по всей ширине. Эквивалентно значению 2
none
: столбцы не растягиваются. Эквивалентно значению 0
spacingWidth
: между столбцами образуются отступы. Эквивалентно значению 1
spacingWidthUniform
: между столбцами образуются равномерные отступы. Эквивалентно значению 3
android:verticalSpacing: устанавливает вертикальные отступы между строками
Основные методы класса GridView:
int getColumnWidth(): возвращает ширину столбцов
int getHorizontalSpacing(): возвращает размер горизонтального отступа
int getNumColumns(): возвращает количество столбцов
int getStretchMode(): возвращает режим растяжения пространства внутри грида
int getVerticalSpacing(): возвращает размер вертикального отступа
void setAdapter(ListAdapter adapter): устанавливает адаптер для подключения к источнику данных
void setColumnWidth(int columnWidth): устанавливает ширину столбцов
void setHorizontalSpacing(int horizontalSpacing): устанавливает размер горизонтального отступа
void setNumColumns(int numColumns): устанавливает количество столбцов
void setStretchMode(int stretchMode): устанавливает режим растяжения пространства внутри грида
void setVerticalSpacing(int verticalSpacing): устанавливает размер вертикального отступа
void setSelection(int position): устанавливает текущий выделенный элемент
Определим GridView в activity_main.xml:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="16dp"> <GridView android:id="@+id/gridview" android:layout_width="0dp" android:layout_height="0dp" android:numColumns="2" android:verticalSpacing="16dp" android:horizontalSpacing="16dp" android:stretchMode="columnWidth" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
В данном случае указываем, что грид будет иметь 2 столбца, которые растягиваются равномерно по всей ширине грида, а между ячейками будут отступы по горизонтали и вертикали в 16 dp.
Теперь, как и в случае с ListView, надо установить связь с адаптером:
package com.example.listapp; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.GridView; import android.widget.Toast; public class MainActivity extends AppCompatActivity { String[] countries = { "Бразилия", "Аргентина", "Чили", "Колумбия", "Уругвай"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // получаем элемент GridView GridView countriesList = findViewById(R.id.gridview); // создаем адаптер ArrayAdapter<String> adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, countries); countriesList.setAdapter(adapter); AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Toast.makeText(getApplicationContext(),"Вы выбрали " + parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show(); } }; countriesList.setOnItemClickListener(itemListener); } }
Для обработки нажатия в GridView применяется слушатель AdapterView.OnItemClickListener.