- GridLayout
- Цифровая клавиатура
- TableLayout vs GridLayout
- Android Layout
- Programmer Help
- Differences between TableLayout and GridLayout
- Differences between TableLayout and GridLayout
- TableLayout
- II. GridLayout
- 2.1 Interlace/Column Effect
- Русские Блоги
- Разница между TableLayout и GridLayout
- Разница между TableLayout и GridLayout
- 1. TableLayout
- 2. GridLayout
- 2.1 Эффект чередования / столбца
- GridLayout против TableLayout
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. Применим его у клавиш, которые необходимо растянуть:
Финальный результат радует глаз:
Как видите, если разобраться, то ничего сложного. Разметка получилась лаконичной и удобной для чтения.
Источник
TableLayout vs GridLayout
Android Layout
If you are an Android Developer, you must have come across a situation when you have to show data in tabular form. In this situation you have two choices, TableLayout and GridLayout. Both layouts can do the job but in their own way, so which layout should be used in which situation,
Let’s go through definition and advantages of each of these layouts,
Table Layout : Table Layout is used to arrange the group of views into rows and columns. Table Layout containers do not display a border line for their columns, rows or cells. A Table will have as many columns as the row with the most cells.A table can also leave the cells empty.
TableLayout is just a layout manager, somewhat like a table in HTML. It does not itself do any scrolling, to have something that scrolls you must put the TableLayout in a ScrollView. This implies that all of the data you are displaying must be populated into the TableLayout up-front, so the ScrollView knows the total space it is to scroll in.
Table layout is useful if someone have low amount of data to display because every row of table layout will have to be instantiated and it won’t be recycled.
Grid Layout : A GridView is basically like a ListView, whose items are arranged in a strict grid. It is attached to an Adapter, and retrieves views from the Adapter has the user scrolls through it. All elements in the grid must be of same size. The user can move a visible selector through each item. The goal of a GridLayout is to display the data from an Adapter and let the user navigate and select each of the displayed items. The only difference from a ListView is that the items are put in a grid instead of in a vertical list.
An Adapter-based view should be used for any situation where you have a significant amount of and the user wants scrolling view, this is a lot more efficient than having to create the entire view hierarchy up-front to display your data.For the same UI, a GridLayout will generally be faster and take less memory than than a TableLayout.
Let’s take an example,
define a RecyclerView inside your Activity Layout,
create single grid cell Layout,
define and RecyclerView, LayoutManager and Adapter in your Activity,
initialize all views in OnCreate,
Create Adapter class,
on running your project you can see table view like this, I have modified some grids for a better understanding.
Conclusion : If the amount of data is low, fixed and don’t require scrolling then TableLayout should be used but if the data is large and require scrolling to access, GridLayout with RecyclerView should be used.
Источник
Programmer Help
Where programmers get help
Differences between TableLayout and GridLayout
Differences between TableLayout and GridLayout
TableLayout
- Inherit LinearLayout
- There is no need to specify how many rows and columns are included
- Control the number of rows and columns in a table by adding TableRow / other components
- There are three cell formats: Shrinkable, Stretchable and Collapsed.
Using TableLayout can only add rows and columns by adding TableRow or components. When components are added directly, they occupy a single line. When a TableRow is added, the layout adds a row, and for each component added in the TableRow, a column is added.
TableLayout can’t do cross-row and cross-column effects. Each row and column is next to each other. Even if the cell sets the Collapsed property, it will be filled up if there are components behind it.
The effect is as follows:
It can be seen that:
— Hidden buttons will not be empty and will be filled in by the components behind them.
— Shrinkage allows the column width to be shrunk to ensure that the table is adapted to the parent container’s width
— Stretching allows all cell widths of the column to be stretched to ensure that the components can fully fill the form space.
II. GridLayout
- New Layout Manager after Android 4.0
- The entire container can be divided into rows*columns grids, each of which can place a component
- You can set how many columns or rows a component spans
- When the cell size is larger than the component size, you can set the location of the component in the cell by setting the layout_grativity attribute value.
- By setting the layout_columnWeight/layout_rowWeight attribute value, you can set the size ratio of each component.
2.1 Interlace/Column Effect
Method 1. Set margin and other attribute values
Method 2. Let the component occupy two columns or two rows, and set layout_grativity to left/right
The code is as follows:
Design sketch:
Источник
Русские Блоги
Разница между TableLayout и GridLayout
Разница между TableLayout и GridLayout
1. TableLayout
- Наследовать LinearLayout
- Нет необходимости четко указывать, сколько строк и столбцов включено
- Контролируйте количество строк и столбцов таблицы, добавляя TableRow / другие компоненты
- Существует 3 типа форматов настройки ячеек: сжимаемая (растягиваемая), растягиваемая (растягиваемая), свернутая (скрытая)
TableLayout может добавлять строки и столбцы только путем добавления TableRow или компонентов. При прямом добавлении компонента он занимает строку самостоятельно. При добавлении TableRow макет добавляет строку, а для каждого компонента, добавляемого в TableRow, добавляется столбец.
TableLayout не может создать эффект пересечения строк и столбцов. Каждая строка и столбец находятся рядом друг с другом. Даже если ячейка устанавливает свойство Collapsed, если за ним есть компоненты, оно будет заполнено.
Эффект заключается в следующем:
Видно:
— Скрытая кнопка не будет пустой, она будет заполнена компонентами позади
— Сжатие приведет к уменьшению ширины столбца, чтобы таблица могла адаптироваться к ширине родительского контейнера.
— Благодаря растяжению можно растянуть ширину всех ячеек в столбце, чтобы компонент мог полностью заполнить пустое пространство таблицы
2. GridLayout
- Новый менеджер раскладок после Android4.0
- Можно разделить весь контейнер на сетку строк * столбцов, каждая сетка может разместить компонент
- Вы можете установить, сколько столбцов или строк охватывает компонент
- Когда размер ячейки больше, чем размер компонента, вы можете установить расположение компонента в ячейке, установив значение свойства layout_grativity
- Установив значение свойства layout_columnWeight / layout_rowWeight, вы можете установить соотношение размеров каждого компонента
2.1 Эффект чередования / столбца
Способ 1. Установите поля и другие значения атрибута
Метод 2. Заставьте компонент занимать два столбца или две строки, установите layout_grativity влево / вправо
Код выглядит следующим образом:
Эффект изображения:
Источник
GridLayout против TableLayout
Я не уверен, какие различия между ними есть и что я должен использовать для своих purpouses?
То, что я пытаюсь сделать, это создать пользовательский виртуальный numpad с текстовыми вводами и который может динамически изменять его содержимое, чтобы иметь выбор даты.
Поэтому мне нужна система компоновки, которая поддерживает в себе много разных размеров.
Что лучше соответствует моим потребностям и в чем разница?
По моему опыту, у меня были и GridLayout и TableLayout , и те же результаты. Кажется, что оба они растягивают столбцы, чтобы соответствовать самому большому дочернему элементу. Ни один из них не даст вам линий или границ вокруг ячеек.
Из официальных документов на GridLayout :
Спецификации строк и столбцов Дети занимают одну или несколько смежных ячеек, как определено их параметрами макета rowSpec и columnSpec. Каждая спецификация определяет набор строк или столбцов, которые должны быть заняты; И как дети должны быть выровнены в результирующей группе клеток. Хотя ячейки обычно не перекрываются в GridLayout, GridLayout не мешает детям определять, что они занимают одну и ту же ячейку или группу ячеек. Однако в этом случае нет гарантии, что дети не будут перекрываться после завершения операции компоновки.
И из TableLayout :
Таблица имеет столько столбцов, сколько строка с большинством ячеек. Таблица может оставить ячейки пустыми. Ячейки могут охватывать столбцы, как они могут в HTML.
Поэтому мне кажется, что GridLayout немного более универсален и, вероятно, то, что вы ищете.
Источник