Skip to content

Most visited

Recently visited

navigation

Como criar listas e cartões

Para criar listas e cartões complexos com estilos do Material Design no seu aplicativo, você pode usar os widgets RecyclerView e CardView .

Criar listas

O widget RecyclerView é uma versão mais avançada e flexível do ListView. Esse widget é um contêiner para exibir grandes conjuntos de dados que podem ser rolados com muita eficiência ao manter um número limitado de visualizações. Use o widget RecyclerView quando tiver coletas de dados cujos elementos mudam durante a execução baseados na ação do usuário ou em eventos de rede.

A classe RecyclerView simplifica a exibição e o tratamento de grandes conjuntos de dados oferecendo:

Você também tem a flexibilidade de definir gerenciadores de layout e animações personalizadas para widgets RecyclerView.

Figura 1. O widget RecyclerView.

Para usar o widget RecyclerView, você deve especificar um adaptador e um gerenciador de layout. Para criar um adaptador, amplie a classe RecyclerView.Adapter. Os detalhes da implementação dependem das especificações do conjunto de dados e do tipo de visualização. Para obter mais informações, veja os exemplos abaixo.

Figura 2 - Listas com RecyclerView.

Um gerenciador de layout posiciona as visualizações de item dentro de um RecyclerView e determina quando reutilizar visualizações de item que não estão mais visíveis ao usuário. Para reutilizar (ou reciclar) uma visualização, um gerenciador de layout pode solicitar ao adaptador a substituição do conteúdo da visualização com um elemento diferente do conjunto de dados. Visualizações recicladas dessa maneira aprimoram o desempenho ao evitar a criação de visualizações desnecessárias ou a realização de pesquisas findViewById() caras.

RecyclerView fornece esses gerenciadores de layout embutidos:

Para criar um gerenciador de layout personalizado, amplie a classe RecyclerView.LayoutManager.

Animações

As animações para a adição e remoção de itens são habilitadas, por padrão, em RecyclerView. Para personalizá-las, amplie a classe RecyclerView.ItemAnimator e use o método RecyclerView.setItemAnimator() .

Exemplos

O exemplo de código a seguir demonstra como adicionar o RecyclerView a um layout:

<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Depois de adicionar um widget RecyclerView ao seu layout, obtenha um identificador para o objeto, conecte-o a um gerenciador de layout e anexe um adaptador para que os dados sejam exibidos:

public class MyActivity extends Activity {
    private RecyclerView mRecyclerView;
    private RecyclerView.Adapter mAdapter;
    private RecyclerView.LayoutManager mLayoutManager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.my_activity);
        mRecyclerView = (RecyclerView) findViewById(R.id.my_recycler_view);

        // use this setting to improve performance if you know that changes
        // in content do not change the layout size of the RecyclerView
        mRecyclerView.setHasFixedSize(true);

        // use a linear layout manager
        mLayoutManager = new LinearLayoutManager(this);
        mRecyclerView.setLayoutManager(mLayoutManager);

        // specify an adapter (see also next example)
        mAdapter = new MyAdapter(myDataset);
        mRecyclerView.setAdapter(mAdapter);
    }
    ...
}

O adaptador dá acesso aos itens no conjunto de dados, cria visualizações para os itens e substitui o conteúdo de algumas das visualizações por novos itens de dados quando o item original não está mais visível. O exemplo de código a seguir mostra uma implementação simples para um conjunto de dados que consiste em uma matriz de strings exibidas usando widgets TextView:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private String[] mDataset;

    // Provide a reference to the views for each data item
    // Complex data items may need more than one view per item, and
    // you provide access to all the views for a data item in a view holder
    public static class ViewHolder extends RecyclerView.ViewHolder {
        // each data item is just a string in this case
        public TextView mTextView;
        public ViewHolder(TextView v) {
            super(v);
            mTextView = v;
        }
    }

    // Provide a suitable constructor (depends on the kind of dataset)
    public MyAdapter(String[] myDataset) {
        mDataset = myDataset;
    }

    // Create new views (invoked by the layout manager)
    @Override
    public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                   int viewType) {
        // create a new view
        View v = LayoutInflater.from(parent.getContext())
                               .inflate(R.layout.my_text_view, parent, false);
        // set the view's size, margins, paddings and layout parameters
        ...
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    // Replace the contents of a view (invoked by the layout manager)
    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        // - get element from your dataset at this position
        // - replace the contents of the view with that element
        holder.mTextView.setText(mDataset[position]);

    }

    // Return the size of your dataset (invoked by the layout manager)
    @Override
    public int getItemCount() {
        return mDataset.length;
    }
}

Figura 3. Exemplos de cartões.

Criar cartões

CardView amplia a classe FrameLayout e permite que você exiba informações dentro dos cartões, que têm uma aparência coerente nas diversas plataformas. Os widgets CardView podem ter sombras e bordas arredondadas.

Para criar um cartão com sombra, use o atributo card_view:cardElevation. CardView usa elevação real e sombras dinâmicas no Android 5.0 (API de nível 21) e posteriores e volta para uma implementação de sombra programática em versões anteriores. Para obter mais informações, consulte Como manter a compatibilidade.

Use estas propriedades para personalizar a aparência do widget CardView:

O exemplo de código a seguir mostra como incluir um widget CardView no layout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    ... >
    <!-- A CardView that contains a TextView -->
    <android.support.v7.widget.CardView
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_view"
        android:layout_gravity="center"
        android:layout_width="200dp"
        android:layout_height="200dp"
        card_view:cardCornerRadius="4dp">

        <TextView
            android:id="@+id/info_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </android.support.v7.widget.CardView>
</LinearLayout>

Para obter mais informações, consulte a referência de API para CardView.

Adicionar dependências

Os widgets RecyclerView e CardView são parte da Biblioteca de Suporte v7. Para usar esses widgets no projeto, adicione estas dependências do Gradle ao módulo do aplicativo:

dependencies {
    ...
    compile 'com.android.support:cardview-v7:21.0.+'
    compile 'com.android.support:recyclerview-v7:21.0.+'
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Siga o Google Developers no WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)