Як встановити додаток RecyclerView: layoutManager = "" з XML?


167

Як встановити RecyclerView layoutManager з XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

Дивіться документацію: recilerview: layoutManager
dieter_h

1
@dieter_h чи можете ви надати відповідь на прикладі GridLayoutManager?
Ілля Газман

4
Можна використовувати app:layoutManager="android.support.v7.widget.GridLayoutManager". Використовуватиметься конструктор з чотирма аргументами ( Context, AttributeSet, int, int). Згідно з документацією, це конструктор, який використовується, коли диспетчер макетів встановлюється в XML за допомогою атрибута layout RenaglerView layoutManager. Якщо spanCount не вказано в XML, він за замовчуванням
ставиться

Відповіді:


269

Як ви можете перевірити в документі:

Назва класу Layout Managerвикористовуваного.

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

Якщо ім'я починається з а '.', пакет додатків має префікс. В іншому випадку, якщо ім'я містить а '.', вважається, що ім'я класу є повним іменем класу. Ще, пакет перегляду утилізатора (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)?
андроїд розробник

8
@androiddeveloper Так, наприклад, щоб встановити його на три стовпці, використовуйте додаток: 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
frapeti

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"
Pratik Butani

майбутній сумісний підхід.
Абхінав Саксена

Тут же ... 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, якщо ви дійсно хочете щось побачити ...


що є appsта appпростори імен, які ви використовували у xml? тому що я отримую помилку в часі збірки Android resource linking failed - AAPT: error: attribute orientation, якщо я використовую app:orientation.
Омкар

спасибі, але все ж це неправильний простір імен. Це повинно бути androidдля orientation. Це не працює з appпростором імен, все інше ідеально.
Омкар

@Omkar знову виправте. Вибачте. Оновлено.
андроїд розробник
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.