Android studio gridlayout border

GridLayout

В Android 4.0 появился новый вид макета под именем GridLayout (раздел Layouts на панели инструментов). На первый взгляд он может показаться похожим на TableLayout. Но на самом деле он гораздо удобнее и функциональнее. И очень рекомендуется изучить и использовать его в своих новых проектах, которые разрабатываются под новую платформу.

Позже в библиотеку совместимости добавили класс android.support.v7.widget.GridLayout, который позволяет использовать компонент и для старых устройств. Найти его можно в разделе AppCompat.

Разметка относится к классу android.widget.GridLayout и имеет колонки, ряды, клетки как в TableLayout, но при этом элементы могут гибко настраиваться.

В GridLayout для любого компонента можно указать строку и колонку, и в этом месте таблицы он будет размещён. Указывать элемент для каждой ячейки не понадобится, это нужно делать только для тех ячеек, где действительно должны быть компоненты. Компоненты могут растягиваться на несколько ячеек таблицы. Более того, в одну ячейку можно поместить несколько компонентов.

В данной разметке нельзя использовать атрибут веса, поскольку он не сработает в дочерних представлениях GridLayout. Используйте атрибут layout_gravity.

Обратите внимание на атрибуты layout_column и layout_columnSpan, используемые для указания самой левой колонки и количества занимаемых компонентом колонок. Также доступны атрибуты layout_row и layout_rowSpan.

Для дочерних элементов не нужно указывать атрибуты layout_height и layout_width, по умолчанию они устанавливаются в значение wrap_content.

Количество колонок и рядов используются атрибуты android:columnCount=»number» и android:rowCount=»number».

Цифровая клавиатура

Для демонстрации создадим пример цифровой клавиатуры или калькулятора, чтобы понять преимущества нового шаблона.

Итак, мы хотим создать разметку, напоминающую цифровую панель на многих моделях клавиатур для настольного компьютера или обычный калькулятор. Если вы посмотрите на цифровую панель, то увидите, что часть клавиш имеет больший размер и вытянуты в длину или ширину. Подобный дизайн практически невозможно реализовать старыми способами — придётся постоянно использовать вложенные конструкции LinearLayout, TableLayout и др.

Но, теперь у нас есть GridLayout. Во многом его поведение схоже с LinearLayout — у него есть горизонтальная и вертикальная ориентации, которые определяют вывод следующего элемента.

Для цифровой клавиатуры, если начнем с клавиши слэша (/) с позиции 4 колонки, то используя горизонтальную ориентацию, нам не нужно пропускать клетки. Выбирая горизонтальную ориентацию, мы ограничиваем число колонок для автоматического переноса новой клетки на следующий ряд. В нашем примере используется четыре колонки. В каждой клетке макета будет находиться кнопка, отцентрированая относительно клетки. Сама разметка должна занимать весь контент экрана.

Дочерние элементы настраиваются не совсем привычном образом. Нам не нужно явно задавать размеры (ширину и высоту) каждого элемента. Согласно нашему плану мы должны использовать четыре колонки для 16 кнопок. Попробуем.

Вот как будет выглядеть первоначальная XML-разметка для нашей цели:

А так будет выглядеть форма в графическом дизайнере:

Поиграйтесь с параметром android:columnCount, чтобы увидеть, как ведёт себя шаблон при разных значениях.

Теперь займёмся более точной настройкой. Например, первая клавиша клавиатуры — символ слеша (/) будет иметь такой же размер, как большинство кнопок, но начинаться с четвёртой колонки. Клавиша (+) идёт после клавиши (9) и занимает три воображаемых ряда. Клавиша (0) должна занять две колонки. Клавиша (=) должна занять три колонки. Внесём требуемые изменения:

Читайте также:  Запрет второй линии андроид

Теперь мы видим такую картину:

Это не совсем то, что нам нужно. Вроде клавиши зарезервировали себе место, но не растянулись до нужных размеров. Исправляем ситуацию. Здесь на помощь нам придёт атрибут layout_gravity. Применим его у клавиш, которые необходимо растянуть:

Финальный результат радует глаз:

Как видите, если разобраться, то ничего сложного. Разметка получилась лаконичной и удобной для чтения.

Источник

Пограничные линии для ячеек в GridLayout, TableLayout или GridView?

Я пытаюсь создать таблицу / сетку для некоторых элементов в моем приложении, и я хотел бы иметь границу вокруг каждой ячейки, чтобы разделить элементы и иметь согласованную связь с этим элементом. Это приложение будет использоваться в промышленных условиях, где могут быть люди, незнакомые с Android, которые должны использовать это, пытаясь сделать это как можно проще.

Таблица / сетка будет содержать TextView , EditText , Spinner и Button , а также будет прокручиваться (через родителя ScrollView ).

Я прочитал о GridView и обнаружил, что он (кажется) способен только получать элементы программно, пожалуйста, исправьте меня, если я ошибаюсь. Я чувствовал, что это не нужно, поскольку я знаю, какие предметы я хочу и где. Кроме того, я еще не пробовал добавлять элементы в макет программно, но я решил, что сначала попробую другие варианты. Кроме того, документация GridView не говорит так или иначе, если автоматически отображаются граничные линии, или если вы можете показать их вообще.

Я начал с TableLayout и смог получить все, кроме границ, чтобы работать. Я пробовал android:divider чтобы получить линии, но это не сработало. Я думал, что я должен создать кучу TextView с черным фоном и шириной

2dp ширины / высоты, чтобы создать свои собственные пограничные линии. Однако это похоже на огромные отходы. Затем я также прочитал документацию TableLayout и нашел следующее: «Контейнеры TableLayout не отображают граничные строки для своих строк, столбцов или ячеек».

Затем я попробовал GridLayout и имел те же результаты, что и TableLayout . Я попробовал padding и margins , не работал. Кроме того, в документации GridLayout указано: «Сетка состоит из набора бесконечно тонких линий, которые разделяют область просмотра на ячейки».

Есть ли attirbute, который я пропустил в TableLayout или GridLayout , который даст мне границы через xml?

Если нет, то GridView даст мне строки, которые я хочу?

Смогу ли я добавить все предыдущие элементы, которые я хочу в GridView ?

Есть ли attirbute, который я пропустил в TableLayout или GridLayout, который даст мне границы через xml?

Если нет, то GridView даст мне строки, которые я хочу?

Смогу ли я добавить все предыдущие элементы, которые я хочу в GridView?

Да, хотя, как хорошо, что-то вроде Spinner будет работать, я не могу сказать.

Самый простой способ, с самого начала, дать вам линии, которые вы ищете, – это каждая ячейка TableLayout или GridLayout быть контейнером, содержащим виджет (ы) для этой ячейки, где вы даете контейнеру фон, который Вашей линии. ShapeDrawable может быть определен в XML для этого фона, который будет красиво изменяться по фактическим требованиям ячейки.

Читайте также:  Опаньки при загрузке этой страницы возникли неполадки android

Я действительно смог добиться желаемого результата, установив android:background=»#000000″ в представлении GridLayout а затем в дочерних элементах я установил android:background=»#8CDD81″ (только зеленый цвет) и в сочетании с android:layout_margin=»2dp» Мне удалось получить строки «сетки», которые я хотел. Благодаря CommonsWare, хотя для того, чтобы заставить меня думать в новом направлении, которое превратилось в решение.

EDIT: Это не работает так, как ожидалось. Вам нужен android:layout_alignLeft/Right которые доступны только через RelativeLayout , чтобы получить только правильную ширину для дочерних элементов. Не тестировали это, используя эту идею, child items в RelativeLayout в GridLayout .

Источник

How to Use GridLayout

If you are interested in using JavaFX to create your GUI, see Working With Layouts in JavaFX.

The following figure represents a snapshot of an application that uses the GridLayout class.

Click the Launch button to run GridLayoutDemo using Java™ Web Start (download JDK 7 or later). Alternatively, to compile and run the example yourself, consult the example index.

The complete code of this demo is in the GridLayoutDemo.java file.

A GridLayout object places components in a grid of cells. Each component takes all the available space within its cell, and each cell is exactly the same size. If the GridLayoutDemo window is resized, the GridLayout object changes the cell size so that the cells are as large as possible, given the space available to the container.

The code snippet below creates the GridLayout object and the components it manages.

The constructor of the GridLayout class creates an instance that has two columns and as many rows as necessary.

Use combo boxes to set up how much vertical or horizontal padding is put around the components. Then click the Apply gaps button. The following code snippet shows how your selection is processed by using the setVgap and setHgap methods of the GridLayout class:

The GridLayout API

The following table lists constructors of the GridLayout class that specify the number of rows and columns.

The GridLayout class constructors

Constructor Purpose
GridLayout(int rows, int cols) Creates a grid layout with the specified number of rows and columns. All components in the layout are given equal size. One, but not both, of rows and cols can be zero, which means that any number of objects can be placed in a row or in a column.
GridLayout(int rows, int cols, int hgap, int vgap) Creates a grid layout with the specified number of rows and columns. In addition, the horizontal and vertical gaps are set to the specified values. Horizontal gaps are places between each of columns. Vertical gaps are placed between each of the rows.

The GridLayout class has two constructors:

Examples that Use GridLayout

The following table lists code examples that use the GridLayout class and provides links to related sections.

Источник

Полный список

GridView – еще один из компонентов, использующих адаптеры. Он выводит элементы в виде сетки/матрицы/таблицы, нужное подчеркнуть )

Сделаем простой пример. И рассмотрим интересные атрибуты этого компонента.

Project name: P0571_GridView
Build Target: Android 2.3.3
Application name: GridView
Package name: ru.startandroid.develop.p0571gridview
Create Activity: MainActivity

Читайте также:  Naruto shippuden ultimate battle android guide low elo

В экран main.xml поместим GridView:

Создадим в любой папке res/drawable-* файл rect.xml

Это просто прямоугольник, залитый синим цветом. Я буду использовать его как фон. Я эту тему еще не рассматривал в уроках, тут можно почитать подробнее .

Создадим свой layout для адаптера – item.xml

LinearLayout с фоном drawable/rect, который мы создали ранее. И TextView.

Кода немного. Определяем GridView и создаем адаптер. В качестве layout для адаптера используем созданный item.xml, а tvText – это элемент, в который адаптер будет вставлять текст. Метод adjustGridView пока пустой, в нем будем кодить настройки Grid-а.

Давайте смотреть, какие для GridView есть атрибуты.

numColumns и columnWidth

numColumns – кол-во столбцов в сетке. Если его не задавать, то столбец будет по умолчанию один. Запустим приложение и убедимся.

Давайте поменяем это свойство — укажем, например 3. Сделаем это в пустом пока что методе adjustGridView

Сохраним и запустим.

Все верно, получилось три столбца.

Это свойство также может иметь значение AUTO_FIT. В этом случае проверяется значение поля атрибута columnWidth (ширина столбца).

— если ширина столбца явно указана, то кол-во столбцов рассчитывается исходя из ширины, доступной GridView, и ширины столбцов.

— иначе, кол-во столбцов считается равным 2

Проверим. Укажем кол-во столбцов = AUTO_FIT, а ширину столбцов задавать пока не будем.

Запускаем, видим два столбца

Теперь укажем явно ширину столбцов, пусть будет 50.

Теперь кол-во столбцов рассчитывается исходя из их ширины.

Видно, что в экран влезло 6 столбцов. Вы можете поизменять параметр ширины столбцов и убедиться, что их кол-во будет меняться.

horizontalSpacing, verticalSpacing

Это горизонтальный и вертикальный отступы между ячейками. Пусть будет 5.

Между ячейками появилось расстояние.

stretchMode

Этот параметр определяет, как будет использовано свободное пространство, если оно есть. Используется в случае, когда вы указываете ширину столбца и кол-во ставите в режим AUTO_FIT. Изменим наш метод, добавим туда настройку stretch-параметра.

stretchMode может принимать 4 значения:

NO_STRETCH – свободное пространство не используется

Столбцы выровнены по левому краю. Все свободное пространство справа.

STRETCH_COLUMN_WIDTH – свободное пространство используется столбцами, это режим по умолчанию

Столбцы растянуты по ширине. Она уже может не соответствовать той, что указана в setColumnWidth.

STRETCH_SPACING – свободное пространство равномерно распределяется между столбцами

Ширина столбцов неизменна. Увеличены интервалы между ними.

STRETCH_SPACING_UNIFORM – свободное пространство равномерно распределяется не только между столбцами, но и справа и слева

Ширина столбцов неизменна. Увеличены интервалы между ними и с боков.

Разумеется, все эти параметры можно задавать не только программно, но и через атрибуты в layout-файлах. Вместо ArrayAdapter можно использовать любой другой. Можно прикрутить обработчик setOnItemClickListener и получать позицию или id нажатого элемента. Все как в обычных списках.

Есть также хороший гугловский пример по этой теме:

На следующем уроке:

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Оцените статью