android - элементов - recyclerview расстояние между элементами

android - элементов - recyclerview расстояние между элементами

Как добавить разделители и пробелы между элементами в RecyclerView? (20)

ОКТЯБРЬ 2016 ОБНОВЛЕНИЕ

В библиотеке поддержки v25.0.0 наконец реализована стандартная реализация базовых горизонтальных и вертикальных разделителей!

Это пример того, как это можно было сделать ранее в классе ListView , используя параметры divider и dividerHeight :

Однако я не вижу такой возможности в классе RecyclerView .

В таком случае, нормально ли определять поля и / или добавлять пользовательский вид разделителя непосредственно в макет элемента списка или есть лучший способ достичь моей цели?

Взятый из поиска Google, добавьте этот ItemDecoration в свой RecyclerView :

Добавьте маржу к своему виду, это сработало для меня.

Если вы просто хотите добавить равный интервал и хотите сделать это в XML , просто установите padding к вашему RecyclerView и равное количество layoutMargin для элемента, который вы надуваете в свой RecyclerView , и пусть цвет фона определяет цвет интервала.

Если кто-то хочет добавить, скажем, расстояние между пунктами 10dp, вы можете сделать это, установив DividerItemDecoration в DividerItemDecoration :

Где divider_10dp - ресурс, который можно использовать:

Поскольку нет правильного способа реализовать это, но с использованием Material Design, я просто сделал следующий трюк, чтобы добавить разделитель в элемент списка напрямую:

Поскольку я установил ItemAnimators . ItemDecorator не входит и не выходит вместе с анимацией.

Я просто закончил тем, что у меня есть строка вида в файле макета элемента для каждого элемента. Он решил мое дело. DividerItemDecoration чувствовал себя к большому количеству колдовства для простого делителя. Или, возможно, я пропустил его реальное использование.

Также вам может потребоваться добавить зависимость compile 'com.android.support:recyclerview-v7:27.1.0'

РЕДАКТИРОВАТЬ:

Чтобы настроить его немного, вы можете добавить пользовательский чертеж:

Вы можете использовать любой пользовательский вариант, например:

Простым является установка цвета фона для RecyclerView и другого цвета фона для элементов. Вот пример .

и элемент TextView (это может быть что угодно) с нижним полем «x» dp или px.

Это фактически не решает проблему, но в качестве временного обходного пути вы можете установить свойство useCompatPadding на карте в вашем XML-макете, чтобы она была такой же, как и в версиях до Lollipop.

Я думаю, что использование простого делителя поможет вам

Чтобы добавить разделитель к каждому элементу: 1- Добавьте это в рисовальный каталог line_divider.xml

2- Создать класс SimpleDividerItemDecoration Я использовал этот пример для определения этого класса: https://gist.github.com/polbins/e37206fbc444207c0e92

3- В действии или фрагменте, использующем RecyclerView, внутри onCreateView добавьте это:

4- Чтобы добавить расстояние между элементами вам просто нужно добавить свойство дополнения к виду вашего элемента

Октябрь 2016 года

В версии 25.0.0 из Android Support Library представлен класс DividerItemDecoration :

DividerItemDecoration - это RecyclerView.ItemDecoration, которое может использоваться как разделитель между элементами LinearLayoutManager. Он поддерживает как HORIZONTAL, так и VERTICAL ориентации.

Предыдущий ответ

Некоторые ответы либо используют методы, которые с тех пор устарели, либо не дают полного решения, поэтому я попытался сделать короткий, обновленный обход.

В отличие от ListView , класс RecyclerView не имеет параметров, связанных с делителем. Вместо этого вам необходимо расширить ItemDecoration , внутренний класс RecyclerView :

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

Все ItemDecorations отображаются в том порядке, в котором они были добавлены, перед просмотром элементов (в onDraw ()) и после элементов (в onDrawOver (Canvas, RecyclerView, RecyclerView.State).

Вертикальный интервал ItemDecoration

Расширьте ItemDecoration , добавьте настраиваемый конструктор, который принимает значение высоты пространства в качестве параметра и переопределяет getItemOffsets() :

Если вы не хотите вставлять пространство ниже последнего элемента, добавьте следующее условие:

Примечание. Вы также можете изменить outRect.top , outRect.left и outRect.right для желаемого эффекта.

Разделитель ItemDecoration

Расширить ItemDecoration и переопределить onDraw() :

Вы можете вызвать первый конструктор, который использует атрибуты разделителя Android по умолчанию, или второй, который использует ваш собственный drawable, например drawable / divider.xml

Примечание. Если вы хотите, чтобы разделитель был нарисован над вашими элементами, вместо этого вместо этого вместо этого onDrawOver() метод onDrawOver() .

использование

Чтобы использовать новый класс, добавьте VerticalSpaceItemDecoration или DividerSpaceItemDecoration в RecyclerView , например, в метод onCreateView() вашего фрагмента:

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

  • Коллекция украшений предметов, в том числе:
  • Разность позиций Горизонтальные / вертикальные разделители.
  • Элемент списка

Внедрите свою собственную версию RecyclerView.ItemDecoration

Если вы хотите добавить одно и то же пространство для элементов, самым простым способом является добавление верхнего и нижнего полей для RecycleView и правого и нижнего полей в элементы карты.

dimens.xml

list_item.xml

list.xml

Мы можем украсить предметы, используя различные декораторы, прикрепленные к recyclerview, такие как DividerItemDecoration:

Просто используйте следующее . взятое из ответа

>, а затем используйте приведенное выше

Это отображает разделители между каждым элементом в списке, как показано ниже:

И для тех, кто ищет более подробную информацию, вы можете ознакомиться с этим руководством. Используя RecyclerView _ CodePath Android Cliffnotes

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

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

Пожалуйста, дайте мне знать о любых сомнениях в комментариях ниже :)

Я добавил строку в элементе списка, как показано ниже.

1px будет рисовать тонкую линию.

Если вы хотите скрыть разделитель для последней строки, то divider.setVisiblity(View.GONE); в onBindViewHolder для последнего элемента списка.

1. Один из способов - с помощью просмотра карт и ресайклеров вместе мы можем легко добавить эффект как разделитель. ех. https://developer.android.com/training/material/lists-cards.html

2. и другие - добавление вида в качестве разделителя в list_item_layout просмотра recycler .

Очень простое решение - использовать RecyclerView-FlexibleDivider

Добавьте к вашему recyclerview:

Слишком поздно, но GridLayoutManager я использую это:

Эта работа для любого диапазона, который у вас есть.

Это RecyclerView немного отличается от ListView . На самом деле, RecyclerView потребности в ListView подобной структуре в нем. Например, a LinearLayout . LinearLayout Имеет параметры для деления каждого элемента. В коде ниже я RecyclerView состою из CardView объектов в пределах LinearLayout с «прокладкой» , которая положит некоторое пространство между элементами. Сделайте это пространство очень маленьким, и вы получите линию.

📎📎📎📎📎📎📎📎📎📎