202

如何从 XML设置RecyclerView layoutManager?

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

6 回答 6

337

正如您可以查看文档:

Layout Manager要使用的类名。

该类必须扩展androidx.recyclerview.widget.RecyclerViewView$LayoutManager并具有默认构造函数或带有签名的构造函数(android.content.Context, android.util.AttributeSet, int, int)

如果名称以 开头'.',则应用程序包为前缀。否则,如果名称包含 a '.',则假定类名是完整的类名。否则,recycler 视图包 ( 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:orientationtools:layoutManager)添加它们,然后它只会影响 IDE 预览,您可以继续在代码中设置这些值。

于 2016-02-28T09:18:45.227 回答
90

我来这里寻找androidx版本虽然很容易弄清楚,但它是

线性布局管理器:

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

网格布局管理器:

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"
于 2018-10-22T00:26:27.023 回答
90

如果你想用它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);
于 2017-02-23T12:27:59.007 回答
18

我最常用的是:

<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 中使用“工具”...

于 2019-02-20T14:38:11.833 回答
2

这对我有用 - 只需添加app:layoutManager="LinearLayoutManager",你就可以开始了

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recordItemList"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:clipToPadding="false"
        android:scrollbars="none"
        app:layoutManager="LinearLayoutManager"
        app:stackFromEnd="true"
        app:reverseLayout="true"/>
于 2020-09-15T01:25:35.603 回答
0

您可以像这样为 recyclerview 设置布局管理器, app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

于 2020-09-15T11:40:02.513 回答