Bagaimana cara mengatur aplikasi RecyclerView: layoutManager = "" dari XML?

167

Bagaimana cara mengatur RecyclerView layoutManager dari XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Ilya Gazman
sumber
Lihat dokumentasi: recyclerview: layoutManager
dieter_h
1
@dieter_h dapatkah Anda memberikan jawaban dengan contoh GridLayoutManager?
Ilya Gazman
4
Anda bisa menggunakannya app:layoutManager="android.support.v7.widget.GridLayoutManager". Konstruktor dengan empat argumen akan digunakan ( Context, AttributeSet, int, int). Menurut dokumentasi ini adalah konstruktor yang digunakan ketika manajer layout diatur dalam XML oleh atribut RecyclerView layoutManager. Jika spanCount tidak ditentukan dalam XML, defaultnya adalah satu kolom
thetonrifles

Jawaban:

269

Seperti yang dapat Anda periksa di dokumen:

Nama kelas yang Layout Managerakan digunakan.

Kelas harus diperluas androidx.recyclerview.widget.RecyclerViewView$LayoutManagerdan memiliki konstruktor default atau konstruktor dengan tanda tangan(android.content.Context, android.util.AttributeSet, int, int)

Jika nama dimulai dengan '.', paket aplikasi diawali. Selain itu, jika namanya mengandung a '.', nama kelas diasumsikan sebagai nama kelas penuh. Selain itu, paket tampilan pendaur ulang ( androidx.appcompat.widget) diawali

Dengan Androidx Anda dapat menggunakan:

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

Dengan perpustakaan dukungan yang dapat Anda gunakan:

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

Anda juga dapat menambahkan atribut ini:

  • android:orientation= "horizontal|vertical": Untuk mengontrol orientasi LayoutManager (misalnya: LinearLayoutManager)
  • app:spanCount: untuk mengatur jumlah kolom untuk GridLayoutManager

Contoh:

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

atau:

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

Anda juga dapat menambahkannya menggunakan toolsnamespace (yaitu tools:orientationdan tools:layoutManager) dan kemudian hanya memengaruhi pratinjau IDE dan Anda dapat melanjutkan pengaturan nilai-nilai tersebut dalam kode.

Gabriele Mariotti
sumber
77
Dan Anda dapat menggunakan android:orientationpada elemen RecyclerView untuk mengontrol orientasi misalnya LinearLayoutManager
androidguy
3
@Gabriele Mariotti Saya memeriksa implementasinya dan menggunakan refleksi. Apakah itu baik dari segi kinerja?
Ahmad Fadli
4
Apakah ada atribut lain yang tersedia jika saya menggunakan GridLayoutManager? Apakah mungkin untuk mengatur jumlah kolomnya (spanCount)?
pengembang android
8
@androiddeveloper Ya, misalnya untuk mengaturnya menjadi tiga kolom gunakan aplikasi: spanCount = "3"
jauser
2
Anda juga dapat menggunakan tools:layoutManager, tools:spanCount(walaupun pelengkapan otomatis tidak menunjukkannya) dan jika Anda tidak ingin mengabaikan pengaturan recyclerview Anda (atau lebih suka secara programatis)
mochadwi
87

jika Anda ingin menggunakannya dengan LinearLayoutManager

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

itu setara dengan

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);
Mina Fawzy
sumber
2
Apa jawaban Anda untuk jawaban Gabriele Mariotti?
Ilya Gazman
4
menjelaskan apa yang setara dengan dalam kode tetapi dengan contoh antera LinearLayout
Mina Fawzy
7
@UdiOshi untuk membuatnya horisontal, Anda perlu menambahkan android:orientation="horizontal"ke RecyclerView xml
rf43
7
androidx.recyclerview.widget.LinearLayoutManager untuk androidX
frapeti
82

Dan saya datang ke sini mencari androidxversi meskipun cukup mudah untuk mencari tahu, ini dia

LinearLayoutManager:

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

Contoh:

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

Contoh:

<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"/>

Seperti yang Anda lihat dalam contoh di atas, Anda dapat mengontrol orientasi dari dalam xmlmenggunakan

android:orientation="vertical"

dan

android:orientation="horizontal"

Dan untuk mengatur jumlah kolom untuk menggunakan GridLayoutManager

app:spanCount="2"
Maks
sumber
10
Anda dapat mengatur no. kolom saat Anda menggunakan GridLayoutManagerdengan menambahkanapp:spanCount="2"
Pratik Butani
pendekatan yang kompatibel di masa depan.
Abhinav Saxena
Sama di sini ... Androidx akan lepas landas 🚀
Robin Hood
1
Terima kasih saya sedang mencari spanCountmenemukannya di sini. Thats why upvote untuk jawabannya :)
Jimit Patel
16

Yang paling umum yang saya gunakan adalah:

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

Dan:

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

Dianjurkan untuk mengatur listitem , sehingga Anda akan melihat tampilannya di pratinjau editor tata letak.

Jika Anda ingin agar pesanan dibatalkan, saya pikir Anda harus melakukannya dalam kode sebagai gantinya, dan menggunakan "alat" dalam XML jika Anda benar-benar ingin melihat sesuatu ...

pengembang android
sumber
yang mana appsdan appruang nama yang telah Anda gunakan di atas xml? karena saya mendapatkan kesalahan waktu bangun Android resource linking failed - AAPT: error: attribute orientation, jika saya gunakan app:orientation.
Omkar
terima kasih, tapi masih saja salah namespace. Itu seharusnya androiduntuk orientation. Itu tidak bekerja dengan appnamespace yang lainnya sempurna.
Omkar
@ Omkar Benar lagi. Maaf. Diperbarui.
pengembang android