如何从 XML 设置 RecyclerView app:layoutManager=""?

How to set RecyclerView app:layoutManager="" from XML?

如何从 XML 设置 RecyclerView layoutManager?

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

您可以查看文档:

Class name of the Layout Manager to be used.

The class must extend androidx.recyclerview.widget.RecyclerViewView$LayoutManager and have either a default constructor or constructor with the signature (android.content.Context, android.util.AttributeSet, int, int)

If the name starts with a '.', application package is prefixed. Else, if the name contains a '.', the classname is assumed to be a full class name. Else, the recycler view package (androidx.appcompat.widget) is prefixed

使用 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的方向(eg: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 预览,您可以继续在代码中设置这些值。

如果您想将它与 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);

我来这里是为了寻找 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"/>

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"

我最常用的是:

<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 中使用 "tools"...

这对我有用 - 只需添加 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"/>

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