Como definir o aplicativo RecyclerView: layoutManager = “” do XML?

167

Como definir o RecyclerView layoutManager a partir do XML?

    <android.support.v7.widget.RecyclerView
        app:layoutManager="???"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
Ilya Gazman
fonte
Consulte a documentação: recyclerview: layoutManager
dieter_h 28/02
1
@dieter_h, você pode fornecer uma resposta com o exemplo GridLayoutManager?
Ilya Gazman
4
Você pode usar app:layoutManager="android.support.v7.widget.GridLayoutManager". Construtor com quatro argumentos serão usados ( Context, AttributeSet, int, int). De acordo com a documentação, esse é o construtor usado quando o gerenciador de layout é definido em XML pelo atributo layoutManager do RecyclerView. Se spanCount não for especificado no XML, o padrão será uma única coluna
thetonrifles

Respostas:

269

Como você pode conferir no documento:

Nome da classe Layout Managera ser usado.

A classe deve estender androidx.recyclerview.widget.RecyclerViewView$LayoutManagere ter um construtor padrão ou um construtor com a assinatura(android.content.Context, android.util.AttributeSet, int, int)

Se o nome começar com a '.', o pacote do aplicativo será prefixado. Caso contrário, se o nome contiver a '.', o nome da classe será assumido como um nome completo da classe. Senão, o pacote de visualização do reciclador ( androidx.appcompat.widget) é prefixado

Com androidx você pode usar:

<androidx.recyclerview.widget.RecyclerView
     xmlns:app="http://schemas.android.com/apk/res-auto"
     app:layoutManager="androidx.recyclerview.widget.GridLayoutManager">

Com as bibliotecas de suporte, você pode usar:

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.GridLayoutManager" >

Além disso, você pode adicionar estes atributos:

  • android:orientation= "horizontal|vertical": Para controlar a orientação da LayoutManager (por exemplo: LinearLayoutManager)
  • app:spanCount: para definir o número de colunas para GridLayoutManager

Exemplo:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
    app:spanCount="2"
    ...>

ou:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    android:orientation="vertical"
    ...>

Você também pode adicioná-los usando o toolsespaço para nome (por exemplo, tools:orientatione tools:layoutManager) e, em seguida, ele afeta apenas a visualização do IDE e pode continuar definindo esses valores no código.

Gabriele Mariotti
fonte
77
E você pode usar android:orientationno elemento RecyclerView para controlar a orientação do ex LinearLayoutManager
androidguy
3
@ Gabriele Mariotti Verifiquei a implementação e ela usa reflexão. Tudo bem do desempenho?
Ahmad Fadli 6/03/2017
4
Existem mais atributos disponíveis no caso de eu usar GridLayoutManager? É possível definir o número de colunas (spanCount)?
desenvolvedor android
8
@androiddeveloper Sim, por exemplo, para configurá-lo para três colunas, use app: spanCount = "3"
jauser 26/04/18
2
você também pode usar tools:layoutManager, tools:spanCount(mesmo que o preenchimento automático não o mostre) e se não quiser substituir nenhuma das configurações de
visualização
87

se você quiser usá-lo com LinearLayoutManager

<android.support.v7.widget.RecyclerView
    xmlns:app="http://schemas.android.com/apk/res-auto"
    app:layoutManager="android.support.v7.widget.LinearLayoutManager" >

isso equivalente a

LinearLayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
mRecyclerView.setLayoutManager(mLayoutManager);
Mina Fawzy
fonte
2
Qual é a sua adição à resposta de Gabriele Mariotti?
Ilya Gazman
4
explicar o que equivalente no código, mas com outro exemplo LinearLayout
Mina Fawzy
7
@UdiOshi para torná-la horizontal, você precisa adicionar android:orientation="horizontal"ao RecyclerView xml
rf43
7
androidx.recyclerview.widget.LinearLayoutManager para androidX
frapeti
82

E eu vim aqui procurando por androidxversão, embora fosse muito fácil descobrir, aqui está

LinearLayoutManager:

app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"

Exemplo:

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

Exemplo:

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

Como você pode ver nos exemplos acima, você pode controlar a orientação de dentro xmlusando

android:orientation="vertical"

e

android:orientation="horizontal"

E para definir o número de colunas para GridLayoutManager usando

app:spanCount="2"
Máx.
fonte
10
Você pode definir não. de colunas quando você usa GridLayoutManageradicionandoapp:spanCount="2"
Pratik Butani 19/01/19
futura abordagem compatível.
Abhinav Saxena
Mesmo aqui ... Androidx prestes a decolar 🚀
Robin Hood
1
Obrigado, eu estava procurando spanCountencontrei aqui. É por isso que upvote para a resposta :)
Jimit Patel
16

Os mais comuns que eu uso são:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" 
    tools:listitem="@layout/grid_item"
    android:orientation="vertical" app:spanCount="3"/>

E:

<androidx.recyclerview.widget.RecyclerView
    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
    tools:listitem="@layout/grid_item"
    android:orientation="vertical"/>

É recomendável definir listitem, para que você veja a aparência na visualização do editor de layout.

Se você deseja que a ordem seja revertida, acho que você deve fazer isso no código e usar "ferramentas" em XML se realmente quiser ver algo ...

desenvolvedor android
fonte
que é appse appnamespaces você usou em XML acima? porque estou recebendo erro de tempo de compilação Android resource linking failed - AAPT: error: attribute orientation, se eu usar app:orientation.
Omkar
obrigado, mas ainda é um espaço para nome errado. Deveria ser androidpara orientation. Não funciona com appespaço para nome; todo o resto é perfeito.
Omkar
@Omkar Corrija novamente. Desculpe. Atualizada.
desenvolvedor android