Элемент 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.