Макет сетки против. Макет таблицы

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

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


person learn_andrd    schedule 17.08.2011    source источник


Ответы (7)


** РЕДАКТИРОВАТЬ: эта строка была правильной, когда этот ответ был написан, но больше не применяется к 99,9%+ всех устройств Android: There is no GridLayout in the Android API. **

(Примечание. Начиная с уровня API 14, наконец-то появился GridLayout; см. ответы ниже. Кроме того, библиотека поддержки V7 добавляет поддержку GridLayout вплоть до API 7. Однако описание GridView в этом ответе по-прежнему точное и очень хорошее. указано.)

Если вы имеете в виду GridView, TableLayout и GridView — это совершенно разные вещи.

GridView в основном похож на ListView, но элементы которого расположены в строгой сетке. Он прикреплен к адаптеру и извлекает представления из адаптера, когда пользователь прокручивает его. Все элементы в сетке должны быть одного размера. Пользователь может перемещать видимый селектор по каждому элементу — цель GridLayout — отображать данные из адаптера и позволять пользователю перемещаться и выбирать каждый из отображаемых элементов. Единственное отличие от ListView заключается в том, что элементы помещаются в сетку, а не в вертикальный список.

TableLayout — это просто менеджер компоновки, что-то вроде таблицы в HTML. Сам по себе он не прокручивает; чтобы иметь что-то, что прокручивается, вы должны поместить TableLayout в ScrollView. Это означает, что все данные, которые вы отображаете, должны быть предварительно заполнены в TableLayout, поэтому ScrollView знает общее пространство, в котором он должен прокручиваться. Он также не дает вам прямого выбора или взаимодействия для «элемента», потому что TableLayout не имеет элементов, это просто менеджер компоновки.

На самом деле вы не дали достаточно полезной информации о том, что вы на самом деле пытаетесь сделать, чтобы кто-нибудь мог порекомендовать, что использовать. Многое зависит от того, что конкретно вы хотите.

Я имею в виду, что будет полезно в плане "дополнительных возможностей"?!? Ну какие функции вы ищете!

В любом случае, как правило, представление на основе адаптера следует использовать в любой ситуации, когда у вас есть значительный объем данных, которые пользователь прокручивает; это намного эффективнее, чем создавать всю иерархию представлений заранее для отображения ваших данных. Они также единственные, которые автоматически обеспечивают выбор для каждого элемента и другие подобные функции. Основным представлением для этого, которое используют приложения, является ListView, хотя GridView также можно использовать.

person hackbod    schedule 17.08.2011
comment
Начиная с API уровня 14 (Ice Cream Sandwich) существует Макет сетки. - person Ranhiru Jude Cooray; 30.01.2012
comment
API LEVEL 14 поддерживает Gird Layout и Space Layout. См. эту ссылку android-developers.blogspot.in/2011/11/ - person bapatla; 03.01.2013
comment
В библиотеке поддержки Android V7 (уровень API 7 - 2.1) есть GridLayout. - person Pork 'n' Bunny; 22.08.2013

Начиная с Android 4.0, существует такая вещь, как Макет сетки. GridLayout всегда предпочтительнее TableLayout. Он предоставляет все, что у вас уже есть в TableLayout, а также может заменить другие макеты.

Это кажется довольно крутым, и кажется, что Google хочет, чтобы он был таким же популярным, как LinearLayout (судя по их видео об Android 4.0).


РЕДАКТИРОВАТЬ: если вам нужно показать много элементов, рассмотрите возможность использования RecyclerView с GridLayoutManager. Это может помочь с точки зрения использования памяти и процессора.

person android developer    schedule 07.01.2012
comment
@ToolmakerSteve Вопрос был о представлении в виде сетки, но тогда это было недоступно, поэтому, когда оно было доступно, я написал, что вы можете использовать его как решение его проблемы. Конечно, если есть множество элементов для отображения, RecyclerView с GridLayoutManager будет более подходящим (который также был добавлен позже). TableLayout — это то, что почти никогда не используется из-за его странного поведения и раздражающего использования. - person android developer; 03.01.2017

Конфигурации TableLayout обычно просты в использовании, поскольку GridLayout поддерживает охват как строк, так и столбцов. TableRows можно удалить, так как они не требуются GridLayout. Для того же пользовательского интерфейса GridLayout обычно работает быстрее и занимает меньше памяти, чем TableLayout.

TableLayout поддерживается во всех версиях Android, в то время как для GridLayout требуется уровень 11 (Android ICS 4.0) или выше, но его можно легко добавить с помощью библиотеки поддержки v7 для поддержки уровня 7 (Android 2.1) или выше.

person Muhammad Annaqeeb    schedule 23.10.2013

Это хорошая презентация GridLayout, в которой также показаны отличия от TableLayout: https://web.archive.org/web/20140630024448/http://blog.stylingandroid.com/archives/669

Однако одним из наиболее важных отличий является то, что он доступен только в ICS (Ice Cream Sandwich) и новее. В настоящее время это означает менее 30 % доли рынка, поэтому для большинства разработчиков ответом будет быть: подождите несколько лет, прежде чем использовать GridLayout. YMMV, конечно.

person johndodo    schedule 20.11.2012
comment
Он был добавлен в библиотеку поддержки V7. - person Pork 'n' Bunny; 22.08.2013
comment
Ссылка blog.stylingandroid.com/archives/669 не работает. @johndodo, если вы знаете обновленную ссылку, мы будем признательны за редактирование. - person Moiz Tankiwala; 02.08.2015
comment
Я изменил ссылку на веб-архив. Обратите внимание, что вы можете сделать то же самое самостоятельно, спасибо за указание на это. - person johndodo; 20.08.2015
comment
ОБНОВЛЕНИЕ 2016: Поскольку GridLayout является частью библиотеки поддержки V7, любой Android 2.1 или более поздней версии работает с этим (при использовании библиотеки поддержки). Сейчас это 99,9% всех Android-устройств. - person ToolmakerSteve; 28.12.2016

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

person romy_ngo    schedule 17.08.2011

В макетах сетки компоненты могут автоматически устанавливать вид, принимая numcolumns="autofit". Здесь нам не нужно устанавливать, сколько строк и столбцов нам требуется, но в макете таблицы у нас нет такой опции, и мы должны установить, сколько строк и столбцов нам требуется. В макете таблицы мы не можем вставить более 1 элемента в строку без использования относительного макета.

person Kimmi    schedule 04.03.2013

Я думаю, что TableLayout будет более простым в использовании. Для GridLayout вам нужно создавать собственные адаптеры и так далее, что приводит к более сложному приложению.

Глядя на разные размеры экрана, GridLayout сам выберет хорошее количество столбцов и строк в соответствии с содержимым, и он будет более гибким при добавлении элементов.

Кроме того, GridLayout будет более гибким, но это требует дополнительной работы.

person Krishna    schedule 17.08.2011
comment
Дал этот ответ -1, потому что это совершенно неправильно. GridLayout не требует адаптера... Вы думаете о GridView... Вот документы для GridLayout: developer.android.com/reference/android/widget/GridLayout.html - person Justin; 19.11.2012