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


167

如何从XML 设置RecyclerView layoutManager?

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


1
@dieter_h您可以使用GridLayoutManager示例提供答案吗?
伊利亚·加兹曼

4
您可以使用app:layoutManager="android.support.v7.widget.GridLayoutManager"。构造带四个参数将被使用(ContextAttributeSetintint)。根据文档,这是RecyclerView属性layoutManager在XML中设置布局管理器时使用
thetonrifles

Answers:


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:orientationtools:layoutManager)添加它们,然后它只会影响IDE预览,您可以继续在代码中设置这些值。


77
而且,您可以android:orientation在RecyclerView元素上使用以控制例如LinearLayoutManager的方向
androidguy

3
@Gabriele Mariotti我检查了实现,它使用了反射。从性能角度来看可以吗?
艾哈迈德·法德利

4
如果我使用GridLayoutManager,还有更多可用属性吗?是否可以设置其列数(spanCount)?
Android开发人员

8
@androiddeveloper是的,例如,将其设置为三列,请使用app:spanCount =“ 3”
jauser

2
您也可以使用tools:layoutManager, tools:spanCount(即使自动完成功能不会显示它),如果您不想覆盖任何recyclerview设置(或以编程方式更喜欢)
mochadwi

87

如果你想用它 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
您对Gabriele Mariotti的回答是什么?
伊利亚·加兹曼

4
解释什么等同于代码,但有另一个示例LinearLayout
Mina Fawzy

7
@UdiOshi使它水平,您需要添加android:orientation="horizontal"到RecyclerView xml
rf43 '18

7
androidX的androidx.recyclerview.widget.LinearLayoutManager
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

未来兼容的方法。
Abhinav Saxena

同样在这里... 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中使用“工具”。


您在上述xml中使用了哪个appsapp名称空间?因为Android resource linking failed - AAPT: error: attribute orientation如果使用,我会遇到构建时间错误app:orientation
Omkar

谢谢,但仍然是错误的名称空间。它应该是androidorientation。它不适用于app名称空间,其他所有功能都不完美。
奥卡(Omkar)

@Omkar再次纠正。抱歉。更新。
android开发人员
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.