Как установить приложение RecyclerView: layoutManager = «» из XML?

167

Как установить RecyclerView layoutManager из XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Илья Газман
источник
См. Документацию: обзор переработчика: layoutManager
dieter_h
1
@dieter_h Можете ли вы дать ответ с примером GridLayoutManager?
Илья Газман
4
Вы можете использовать app:layoutManager="android.support.v7.widget.GridLayoutManager". Будет использоваться конструктор с четырьмя аргументами ( Context, AttributeSet, int, int). Согласно документации это конструктор, который используется, когда менеджер компоновки установлен в XML с помощью атрибута RecyclerView layoutManager. Если spanCount не указан в XML, по умолчанию используется один столбец
thetonrifles

Ответы:

269

Как вы можете проверить в документе:

Имя класса Layout Managerдля использования.

Класс должен расширяться androidx.recyclerview.widget.RecyclerViewView$LayoutManagerи иметь конструктор по умолчанию или конструктор с подписью(android.content.Context, android.util.AttributeSet, int, int)

Если имя начинается с '.', пакет приложения имеет префикс. Иначе, если имя содержит a '.', предполагается , что имя класса является полным именем класса. Иначе, представление пакета рециркуляции ( androidx.appcompat.widget) имеет префикс

С androidx вы можете использовать:

<androidx.recyclerview.widget.RecyclerView
     xmlns:app="http://schemas.android.com/apk/res-auto"
     app:layoutManager="androidx.recyclerview.widget.GridLayoutManager">

С библиотеками поддержки вы можете использовать:

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.GridLayoutManager" >

Также вы можете добавить эти атрибуты:

  • android:orientation= "horizontal|vertical": Контролировать ориентацию LayoutManager (например: LinearLayoutManager)
  • app:spanCount: установить количество столбцов для GridLayoutManager

Пример:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
    app:spanCount="2"
    ...>

или:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    android:orientation="vertical"
    ...>

Вы также можете добавить их, используя toolsпространство имен (то есть tools:orientationи tools:layoutManager), и тогда это повлияет только на предварительный просмотр IDE, и вы можете продолжить установку этих значений в коде.

Габриэле Мариотти
источник
77
И вы можете использовать android:orientationэлемент RecyclerView для управления ориентацией, например, LinearLayoutManager
androidguy
3
@Gabriele Mariotti Я проверил реализацию, и она использует отражение. Это нормально с точки зрения производительности?
Ахмад Фадли,
4
Есть ли еще доступные атрибуты, если я использую GridLayoutManager? Можно ли установить его количество столбцов (spanCount)?
Android-разработчик
8
@androiddeveloper Да, например, чтобы установить три столбца, используйте app: spanCount = "3"
jauser
2
Вы также можете использовать tools:layoutManager, tools:spanCount(даже если автозаполнение не показывает его), и если вы не хотите отменять какие-либо настройки вашего реселлера (или предпочитаете программно)
mochadwi
88

если вы хотите использовать его с LinearLayoutManager

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" >

что эквивалентно

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);
Мина Фаузи
источник
2
Каково ваше дополнение к ответу Габриэле Мариотти?
Илья Газман
4
объяснить, что эквивалентно в коде, но с другим примером LinearLayout
Mina Fawzy
7
@UdiOshi, чтобы сделать его горизонтальным, вам нужно добавить android:orientation="horizontal"в RecyclerView xml
rf43
7
androidx.recyclerview.widget.LinearLayoutManager для androidX
фрапети
82

И я пришел сюда в поисках androidxверсии, хотя это было довольно легко выяснить, вот она

LinearLayoutManager:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

Пример:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"/>

GridLayoutManager:

app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"

Пример:

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    app:spanCount="2"
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"/>

Как вы можете видеть на примерах выше, вы можете управлять ориентацией изнутри, xmlиспользуя

android:orientation="vertical"

и

android:orientation="horizontal"

И установить количество столбцов для GridLayoutManager с помощью

app:spanCount="2"
Максимум
источник
10
Вы можете установить нет. столбцов при использовании GridLayoutManagerпутем добавленияapp:spanCount="2"
Пратик Бутани
совместимый с будущим подход.
Абхинав Саксена
То же самое здесь ... Androidx собирается взлететь 🚀
Робин Гуд
1
Спасибо, что искал, spanCountнашел это здесь. Вот почему голосуем против ответа :)
Джимит Патель
16

Наиболее распространенные из них, которые я использую:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" 
    tools:listitem="@layout/grid_item"
    android:orientation="vertical" app:spanCount="3"/>

И:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    tools:listitem="@layout/grid_item"
    android:orientation="vertical"/>

Рекомендуется установить listitem, чтобы вы могли видеть, как это может выглядеть в предварительном просмотре редактора макетов.

Если вы хотите изменить порядок, я думаю, что вместо этого вы должны сделать это в коде и использовать «инструменты» в XML, если вы действительно хотите что-то увидеть ...

разработчик Android
источник
который appsи appпространства имен вы использовали в выше XML? потому что я получаю ошибку времени сборки Android resource linking failed - AAPT: error: attribute orientation, если я использую app:orientation.
Омкар
спасибо, но все же это неверное пространство имен. Это должно быть androidдля orientation. Это не работает с appпространством имен, все остальное идеально.
Омкар
@ Омкар Поправь еще раз. Сожалею. Обновлено.
разработчик Android