2016-01-15 5 views
2

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

Medium

Как я могу добиться этого?

ответ

1

Вы можете подойти к проблеме по двум основным направлениям:

  1. Использование ScrollView с Linear - или RelativeLayout внутри. Затем вы добавляете элементы в свой код, измеряя каждый и помещая их в новые строки, когда это необходимо. Для этого потребуется создание некоторой логики, но она достижима. ScrollView позаботится о прокрутке, если содержимое превышает высоту экрана. Проблема с этим решением заключается в том, что у вас не будет механизма рециркуляции, что может привести к проблемам с памятью, когда список будет длинным.

  2. Используйте RecyclerView! : -D Одной из замечательных особенностей RecyclerView является тот факт, что, предоставляя стандартную концепцию списка элементов на основе адаптера, он также позволяет вам реализовать пользовательский LayoutManager. Создайте свою собственную реализацию LayoutManager, которая позиционирует элементы на основе их измерения, и вы закончите, RecyclerView позаботится о прокрутке и переработке предметов для вас! : -D Это займет некоторое время, особенно если у вас нет опыта работы с RecyclerView, но все это займет не более нескольких часов и, по моему скромному мнению, действительно того стоит.

Вы можете выбрать либо, но второй подход является более современным и, в общем, проще реализовать. В общем, вы должны научиться использовать RecyclerView, он помогает много и быстрее реализуется, чем старый добрый List - и GridViews, как только вы его повесите.

+0

Я рассмотрел использование 'RecyclerView', но проблема заключается в использовании его в' ScrollView', который действительно не работает. –

+0

И зачем вам 'ScrollView'? – Kelevandos

+0

У меня есть другие элементы на одном и том же макете, и вышеупомянутое «GridView» будет последним в макете. –