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

如何从XML设置RecyclerView layoutManager ?

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

你可以在文档中查看:

要使用的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预览,你可以继续在代码中设置这些值。

如果你想和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版本,虽然它很容易弄清楚,在这里

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"

我最常用的是:

<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中的“工具”……

这对我来说是有效的-只需添加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"

例子

implementation 'com.android.support:recyclerview-v7:28.0.0'
<android.support.v7.widget.RecyclerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"


tools:layoutManager="android.support.v7.widget.LinearLayoutManager"
/>

layoutManager可以是android.support.v7.widget.LinearLayoutManagerandroid.support.v7.widget.GridLayoutManager

[阅读更多] .