Это пример того, как это можно было сделать ранее в ListView
классе, используя параметры divider и dividerHeight :
<ListView
android:id="@+id/activity_home_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:dividerHeight="8dp"/>
Однако я не вижу такой возможности в RecyclerView
классе.
<android.support.v7.widget.RecyclerView
android:id="@+id/activity_home_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="vertical"/>
В этом случае можно ли определять поля и / или добавлять пользовательский вид делителя непосредственно в макет элемента списка или есть лучший способ достичь моей цели?
android
android-recyclerview
divider
EyesClear
источник
источник
com.homeretailgroup.argos.android.view.decorators.DividerItemDecoration
и используйте его так:mRecyclerView.addItemDecoration(new DividerItemDecoration(activity, LinearLayoutManager.VERTICAL));
Ответы:
Обновление за октябрь 2016
В версии 25.0.0 библиотеки поддержки Android представлен
DividerItemDecoration
класс:Применение:
Предыдущий ответ
В некоторых ответах либо используются методы, которые с тех пор устарели, либо они не дают полного решения, поэтому я попытался сделать короткую, актуальную сводку.
В отличие от этого
ListView
,RecyclerView
класс не имеет параметров, связанных с делителем. Вместо этого вам необходимо расширитьItemDecoration
, ARecyclerView
«S внутренний класс:Vertical
расстояниеItemDecoration
Расширить
ItemDecoration
, добавить пользовательский конструктор, который принимает пространствоheight
в качестве параметра и переопределитьgetItemOffsets()
метод:Если вы не хотите вставлять пробел под последним элементом, добавьте следующее условие:
Примечание: Вы также можете изменить
outRect.top
,outRect.left
иoutRect.right
свойство для достижения желаемого эффекта.делитель
ItemDecoration
Расширить
ItemDecoration
и переопределитьonDraw()
метод:Вы можете либо вызвать первый конструктор, который использует атрибуты делителя Android по умолчанию, либо второй, который использует ваш собственный drawable, например drawable /divr.xml
Примечание: если вы хотите, чтобы разделитель отображался поверх ваших элементов, используйте
onDrawOver()
метод переопределения .Применение
Чтобы использовать ваш новый класс add
VerticalSpaceItemDecoration
илиDividerSpaceItemDecoration
toRecyclerView
, например, вonCreateView()
методе вашего фрагмента :Также есть библиотека Лукаса Роча, которая должна упростить процесс украшения предметов. Хотя не пробовал.
Среди его особенностей :
источник
onDraw()
. Я просто ссылаюсь на уже существующие экземпляры.canvas.drawLine(startX, startY, stopX, stopY, mPaint)
вonDrawOver
? Есть разница в производительности?Просто добавь
Также вам может понадобиться добавить зависимость
compile 'com.android.support:recyclerview-v7:27.1.0'
РЕДАКТИРОВАТЬ:
Чтобы немного его настроить, вы можете добавить собственный чертеж:
Вы можете использовать любой пользовательский объект, например:
источник
Configuration
для вертикального делителя:if (orientation == Configuration.ORIENTATION_LANDSCAPE) { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL)); } else { recyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL));}
Могу я обратить ваше внимание на этот конкретный файл на Github Алекса Фу: https://gist.github.com/alexfu/0f464fc3742f134ccd1e
Это файл примера DividerItemDecoration.java, "извлеченный прямо из демонстрационных роликов поддержки". ( Https://plus.google.com/103498612790395592106/posts/VVEB3m7NkSS )
После импорта этого файла в мой проект я смог получить разделительные линии и добавить его в качестве украшения элемента в представление переработчика.
Вот как выглядит мой onCreateView в моем фрагменте, содержащем Recyclerview:
Я уверен, что можно сделать дополнительный стиль, но это отправная точка. :)
источник
Простая
ItemDecoration
реализация для равных мест между всеми элементами.источник
getChildPosition
теперь устарела,getChildAdapterPosition
может использоваться вместоsuper.getItemOffsets
, иначе ваши смещения будут перезаписаны.getChildLayoutPosition
быть использован?Самый простой - установить цвет фона для RecyclerView и другой цвет фона для элементов. Вот пример ...
и элемент TextView (это может быть что угодно) с нижним полем «x» dp или px.
Выход ...
источник
Я думаю, что использование простого разделителя поможет вам
добавить разделитель для каждого элемента:
1- Добавьте это в каталог drawable line_divider.xml
2. Создание класса SimpleDividerItemDecoration.
Я использовал этот пример для определения этого класса:
https://gist.github.com/polbins/e37206fbc444207c0e92
3- В упражнении или фрагменте, которые используют RecyclerView, внутри onCreateView добавьте это:
4- Чтобы добавить интервал между Предметами,
вам просто нужно добавить свойство отступов к вашему виду.
источник
Как я и установил
ItemAnimators
.ItemDecorator
Не входить или выходить вместе с анимацией.Я просто получил строку представления в файле макета представления каждого элемента. Это решило мой случай.
DividerItemDecoration
чувствовал себя слишком большим колдовством для простого делителя.источник
Это просто, вам не нужен такой сложный код
Добавьте это в свой чертеж: line_divider.xml
источник
Поскольку пока нет правильного способа реализовать это с помощью Material Design, я просто выполнил следующий трюк, чтобы напрямую добавить разделитель в элемент списка:
источник
Способ работы с представлением «Разделитель», а также «Вставки разделителя» заключается в добавлении расширения RecyclerView.
1.
Добавьте новый файл расширения с именем View или RecyclerView:
и добавьте
setDivider
метод расширения в файл RecyclerViewExtension.kt.2.
Создайте файл ресурсов Drawable внутри
drawable
пакета, напримерrecycler_view_divider.xml
:где вы можете указать левый и правый край на
android:insetLeft
иandroid:insetRight
.3.
В вашей Деятельности или Фрагменте, где инициализируется RecyclerView, вы можете установить настраиваемое рисование, вызвав:
4.
Приветствия 🍺
источник
Если кто-то хочет добавить, скажем, 10dp интервал между элементами, вы можете сделать это, установив drawable в
DividerItemDecoration
:Где
divider_10dp
рисованный ресурс, содержащий:источник
ОКТЯБРЬ 2016 ОБНОВЛЕНИЕ
С поддержкой библиотеки v25.0.0 наконец-то появилась стандартная реализация базовых горизонтальных и вертикальных разделителей!
https://developer.android.com/reference/android/support/v7/widget/DividerItemDecoration.html
источник
На самом деле это не решает проблему, но в качестве временного обходного пути вы можете установить свойство useCompatPadding на карточке в макете XML, чтобы оно измерялось так же, как и в версиях до Lollipop.
источник
Для тех , кто ищет только для пространств между элементами в
RecyclerView
см моего подход , при котором вы получаете равные промежутки между всеми деталями, за исключением первых и последних пунктами , где я дал большие отступы. Я применяю отступы только влево / вправо по горизонталиLayoutManager
и сверху / снизу по вертикалиLayoutManager
.dimens.xml
источник
Добавьте маржу к вашему мнению, это сработало для меня.
Если вы просто хотите , чтобы добавить равное расстояние и хотите сделать это в XML , просто установить
padding
на свойRecyclerView
и равное количествоlayoutMargin
для элемента , который вы раздувать в вашRecyclerView
, и пусть цвет фона определяют цвет интервала.источник
overscroll
эффекту при перетаскивании в конце списка будет добавлен ненужный отступ, когда к нему применяетсяRecyclerView
<?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:card_view="http://schemas.android.com/apk/res-auto" android:id="@+id/card_view" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" card_view:cardElevation="4dp" <!-- your item's XML here --> </android.support.v7.widget.CardView>
Просто добавьте фон к макету вашего предмета утилизации следующим образом
Создайте следующий shape_border.xml в папке drawable
Вот окончательный результат - RecyclerView с разделителем.
источник
parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1
вероятно , следуетparent.getChildAdapterPosition(view) > 0
сoutRect.bottom = mVerticalSpaceHeight
ставoutRect.top = mVerticalSpaceHeight
должно быть приемлемым ответом.Я раздвоил DividerItemDecoration из более ранней сущности и упростил его, чтобы он соответствовал моему сценарию использования, и я также изменил его, чтобы нарисовать разделители так, как они нарисованы в ListView, включая разделитель после последнего элемента списка. Это также будет обрабатывать вертикальную анимацию ItemAnimator:
1) Добавьте этот класс в ваш проект:
2) Добавьте декоратор в свой RecylerView:
источник
Вместо того, чтобы создать
shape xml
для изменения высоты и цвета разделителя. Вы можете создать программно какисточник
Взятый из поиска Google, добавьте этот ItemDecoration к вашему
RecyclerView
:источник
Эта ссылка для меня сработала:
https://gist.github.com/lapastillaroja/858caf1a82791b6c1a36
Тогда в вашей деятельности:
Или это, если вы используете фрагмент:
источник
mShowFirstDivider = false
,mShowLastDivider = true
но это не сработает. Есть идеи почему?Мы можем украсить элементы, используя различные декораторы, прикрепленные к представлению переработчика, такие как DividerItemDecoration:
Просто используйте следующее ... взято из ответа EyesClear
}, а затем используйте вышеизложенное следующим образом
Это отобразит разделители между каждым элементом в списке, как показано ниже:
А те, кто ищет подробности, могут ознакомиться с этим руководством. Использование RecyclerView _ CodePath Android Cliffnotes
Некоторые ответы здесь предполагают использование полей, но выгода заключается в следующем: если вы добавите верхние и нижние поля, они будут добавлены между элементами и будут слишком большими. Если вы добавите только один из них, не будет никакого поля ни в верхней, ни в нижней части всего списка. Если вы добавите половину расстояния сверху, половину снизу, то внешние поля будут слишком маленькими.
Таким образом, единственное эстетически правильное решение - это разделитель, который система знает, где правильно применять: между элементами, но не над или под элементами.
Пожалуйста, дайте мне знать о любых сомнениях в комментариях ниже :)
источник
DividerItemDecoration
выглядит код.Слишком поздно, но
GridLayoutManager
я использую это:Эта работа для любого количества пролетов у вас есть.
Олли.
источник
FlexboxLayoutManager
?Вы можете добавить с программно легко.
Если ваш Layout Manager - Linearlayout, вы можете использовать:
источник
источник
Мне кажется, что нужен простой ответ на основе кода, который не использует XML
источник
Если вы хотите добавить одинаковое пространство для элементов, самый простой способ - добавить верхнее + левое заполнение для RecycleView и правое + нижнее поле для элементов карточки.
dimens.xml
list_item.xml
list.xml
источник
Я добавил строку в элемент списка, как показано ниже
1px нарисует тонкую линию.
источник
Это
RecyclerView
немного отличается отListView
. На самом деле,RecyclerView
нужнаListView
подобная структура. Например,LinearLayout
.LinearLayout
Имеет параметры для деления каждого элемента. В коде ниже яRecyclerView
состою изCardView
объектов в пределахLinearLayout
с «отступом», который будет помещать некоторое пространство между элементами. Сделайте это пространство действительно маленьким, и вы получите линию.Вот представление Recycler в recyclerview_layout.xml
И вот как выглядит каждый элемент (и он отображается как разделенный из-за андроида: отступ в LinearLayout, который окружает все.) В другом файле: cards_layout.xml
источник
Действительно простое решение - использовать RecyclerView-FlexibleDivider.
Добавить зависимость:
Добавьте в свой список переработчиков:
И вы сделали!
источник
1. Одним из путей является совместное использование карт и вида переработчика, мы можем легко добавить эффект, например, делитель. ех. https://developer.android.com/training/material/lists-cards.html
2. и другое, добавив представление в качестве разделителя к list_item_layout представления переработчика .
источник
Это добавит пространство сверху и снизу каждого элемента (или слева и справа). Затем вы можете установить его на свой
recyclerView
.SizeUtils.java
источник