План сетки Vs.Макет таблицы - PullRequest
35 голосов
/ 17 августа 2011

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

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

Ответы [ 7 ]

33 голосов
/ 17 августа 2011

** РЕДАКТИРОВАТЬ: эта строка была правильной, когда этот ответ был написан, но больше не относится к 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.

20 голосов
/ 07 января 2012

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

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


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

10 голосов
/ 23 октября 2013

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

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

4 голосов
/ 21 ноября 2012

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

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

2 голосов
/ 17 августа 2011

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

0 голосов
/ 04 марта 2013

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

0 голосов
/ 17 августа 2011

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

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

Также GridLayout будет более гибким, но это еще немного работы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...