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

ドキュメントを参照:recyclerview:layoutManager
dieter_h

1
@dieter_hは、GridLayoutManagerの例で回答を提供できますか?
Ilya Gazman、2016

4
使用できますapp:layoutManager="android.support.v7.widget.GridLayoutManager"。四つの引数を持つコンストラクタが使用されます(ContextAttributeSetintint)。ドキュメントによると、これはRecyclerView属性layoutManagerによってレイアウトマネージャーがXMLで設定されるときに使用されるコンストラクターです。XMLでspanCountが指定されていない場合は、デフォルトで単一の列になります
thetonrifles

回答:


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:orientationおよびおよびtools:layoutManager)を使用してそれらを追加することもできます。追加すると、IDEプレビューにのみ影響し、コードでこれらの値の設定を続行できます。


77
またandroid:orientation、RecyclerView要素を使用して、たとえばLinearLayoutManagerの方向を制御できます
androidguy

3
@Gabriele Mariotti実装を確認し、リフレクションを使用しました。パフォーマンスに関しては問題ありませんか?
Ahmad Fadli 2017年

4
GridLayoutManagerを使用する場合に使用できる属性は他にありますか?列数(spanCount)を設定することは可能ですか?
Android開発者、

8
@androiddeveloperはい、たとえば3列に設定するには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
ガブリエレ・マリオッティの答えに追加したものは何ですか?
Ilya Gazman 2017

4
コードで同等のものを説明しますが、別の例であるLinearLayout
Mina

7
@UdiOshiを水平にするandroid:orientation="horizontal"には、RecyclerView xml に追加する必要があります
rf43

7
androidx.recyclerview.widget.LinearLayoutManager for androidX
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が離陸しようabout
ロビンフッド

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で「ツール」を使用する必要があります...


これはappsappあなたが上記のXMLで使用している名前空間?Android resource linking failed - AAPT: error: attribute orientation私が使用すると、ビルド時にエラーが発生するためapp:orientationです。
Omkar

おかげで、それでも名前空間が間違っています。それはのandroidためである必要がありますorientationapp他のすべてが完璧な名前空間では機能しません。
Omkar

@Omkarもう一度修正します。ごめんなさい。更新しました。
アンドロイドデベロッパー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.