Làm cách nào để thiết lập ứng dụng RecyclerView: layoutManager = giết chết từ XML?


167

Làm cách nào để đặt RecyclerView layoutManager từ XML?

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

Xem tài liệu: recyclerview:
layoutManager

1
@dieter_h bạn có thể cung cấp câu trả lời với ví dụ GridLayoutManager không?
Ilya Gazman

4
Bạn có thể sử dụng app:layoutManager="android.support.v7.widget.GridLayoutManager". Constructor với bốn đối số sẽ được sử dụng ( Context, AttributeSet, int, int). Theo tài liệu, đây là hàm tạo được sử dụng khi trình quản lý bố cục được đặt trong XML bởi RecyclerView thuộc tính layoutManager. Nếu spanCount không được chỉ định trong XML, nó sẽ mặc định thành một cột duy nhất
thetonrifles

Câu trả lời:


269

Như bạn có thể kiểm tra trong tài liệu:

Tên lớp Layout Managerđược sử dụng.

Lớp phải mở rộng androidx.recyclerview.widget.RecyclerViewView$LayoutManagervà có một hàm tạo hoặc hàm tạo mặc định có chữ ký(android.content.Context, android.util.AttributeSet, int, int)

Nếu tên bắt đầu bằng một '.', gói ứng dụng có tiền tố. Khác, nếu tên chứa a '.', tên lớp được giả sử là tên lớp đầy đủ. Khác, gói xem tái chế ( androidx.appcompat.widget) có tiền tố

Với androidx bạn có thể sử dụng:

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

Với các thư viện hỗ trợ bạn có thể sử dụng:

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

Ngoài ra, bạn có thể thêm các thuộc tính này:

  • android:orientation= "horizontal|vertical": để kiểm soát hướng của Trình quản lý bố cục (ví dụ LinearLayoutManager:)
  • app:spanCount: để đặt số lượng cột cho GridLayoutManager

Thí dụ:

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

hoặc là:

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

Bạn cũng có thể thêm chúng bằng cách sử dụng toolskhông gian tên (ví dụ tools:orientationtools:layoutManager) và sau đó nó chỉ tác động đến chế độ xem trước IDE và bạn có thể tiếp tục thiết những giá trị trong mã.


77
Và bạn có thể sử dụng android:orientationtrên phần tử RecyclerView để điều khiển hướng của ví dụ:
linearLayoutManager

3
@Gabriele Mariotti Tôi đã kiểm tra việc thực hiện và nó sử dụng sự phản chiếu. Điều đó có ổn từ hiệu suất khôn ngoan?
Ahmad Fadli

4
Có nhiều thuộc tính khả dụng hơn trong trường hợp tôi sử dụng GridLayoutManager không? Có thể đặt số lượng cột (spanCount) không?
nhà phát triển Android

8
@androiddeveloper Có, ví dụ: để đặt thành ba cột, hãy sử dụng ứng dụng: spanCount = "3"
jauser

2
bạn cũng có thể sử dụng tools:layoutManager, tools:spanCount(ngay cả khi tự động hoàn thành không hiển thị) và nếu bạn không muốn ghi đè bất kỳ thiết lập tái chế nào của bạn (hoặc thích lập trình hơn)
mochadwi

87

nếu bạn muốn sử dụng nó với LinearLayoutManager

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

tương đương với

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);

2
Sự bổ sung của bạn vào câu trả lời của Gabriele Mariotti là gì?
Ilya Gazman

4
giải thích những gì tương đương với mã nhưng với ví dụ bao phấn là linearLayout
Mina Fawzy

7
@UdiOshi để làm cho nó nằm ngang, bạn cần thêm android:orientation="horizontal"vào RecyclerView xml
rf43

7
androidx.recyclerview.widget.LinearLayoutManager cho androidX
frapeti

82

Và tôi đến đây để tìm androidxphiên bản mặc dù nó khá dễ để tìm ra, đây là

Trình quản lý tuyến tính:

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

Thí dụ:

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

GridLayoutQuản lý:

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

Thí dụ:

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

Như bạn có thể thấy trong các ví dụ ở trên, bạn có thể kiểm soát hướng từ bên trong xmlbằng cách sử dụng

android:orientation="vertical"

android:orientation="horizontal"

Và để đặt số lượng cột cho GridLayoutManager bằng cách sử dụng

app:spanCount="2"

10
Bạn có thể đặt không. các cột khi bạn sử dụng GridLayoutManagerbằng cách thêmapp:spanCount="2"
Pratik Butani

cách tiếp cận tương thích.
Abhinav Saxena

Tương tự ở đây ... Androidx sắp cất cánh 🚀
Robin Hood

1
Cảm ơn tôi đã tìm kiếm spanCountnó ở đây. Đó là lý do tại sao đưa ra câu trả lời :)
Jimit Patel

16

Những cái phổ biến nhất mà tôi sử dụng là:

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

Và:

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

Bạn nên cài đặt listitemđể bạn thấy nó có thể trông như thế nào trong bản xem trước của trình chỉnh sửa bố cục.

Nếu bạn muốn đảo ngược thứ tự, tôi nghĩ rằng bạn phải thực hiện nó bằng mã thay vào đó và sử dụng "công cụ" trong XML nếu bạn thực sự muốn thấy một cái gì đó ...


đó là appsappkhông gian tên bạn đã sử dụng trong xml ở trên? bởi vì tôi đang nhận được lỗi thời gian xây dựng Android resource linking failed - AAPT: error: attribute orientation, nếu tôi sử dụng app:orientation.
Omkar

cảm ơn, nhưng vẫn là không gian tên sai. Nó nên androiddành cho orientation. Nó không hoạt động với appkhông gian tên mọi thứ khác là hoàn hảo.
Omkar

@Omkar Đúng lại. Lấy làm tiếc. Cập nhật.
nhà phát triển Android
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.