Adicionar ícones de carregamento ao app

Os controles giratórios oferecem uma forma rápida de selecionar um valor de um conjunto. No estado padrão, um ícone de carregamento mostra o valor selecionado no momento. Tocar no ícone de carregamento mostra um menu com todos os outros valores que o usuário pode selecionar.

Figura 1. Menu de um ícone de carregamento que mostra os valores disponíveis.

Você pode adicionar um ícone de carregamento ao layout com o objeto Spinner, o que geralmente é feito no layout XML com um elemento <Spinner>. Isso é mostrado neste exemplo:

<Spinner
    android:id="@+id/planets_spinner"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

Para preencher o ícone de carregamento com uma lista de opções, especifique um SpinnerAdapter no código-fonte Activity ou Fragment.

Se você estiver usando componentes do Material Design, os menus suspensos expostos são equivalentes a um Spinner.

Preencher o ícone de carregamento com opções do usuário

As opções fornecidas para o ícone de carregamento podem vir de qualquer origem, mas precisam ser fornecidas por meio de um SpinnerAdapter, como um ArrayAdapter, se as opções estiverem disponíveis em uma matriz, ou um CursorAdapter se estiverem disponíveis em uma consulta de banco de dados.

Por exemplo, se as opções disponíveis para o ícone de carregamento forem predeterminadas, você poderá fornecê-las com uma matriz de strings definida em um arquivo de recursos de string:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
        <item>Jupiter</item>
        <item>Saturn</item>
        <item>Uranus</item>
        <item>Neptune</item>
    </string-array>
</resources>

Com uma matriz como essa, é possível usar o seguinte código no Activity ou Fragment para fornecer a matriz ao ícone de carregamento usando uma instância de ArrayAdapter:

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
).also { adapter ->
    // Specify the layout to use when the list of choices appears.
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
    // Apply the adapter to the spinner.
    spinner.adapter = adapter
}

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
// Create an ArrayAdapter using the string array and a default spinner layout.
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
        this,
        R.array.planets_array,
        android.R.layout.simple_spinner_item
);
// Specify the layout to use when the list of choices appears.
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
// Apply the adapter to the spinner.
spinner.setAdapter(adapter);

O método createFromResource() permite criar um ArrayAdapter usando a matriz de strings. O terceiro argumento para esse método é um recurso de layout que define como a opção selecionada aparece no controle giratório. A plataforma fornece o layout simple_spinner_item. Esse é o layout padrão, a menos que você queira definir seu próprio layout para a aparência do ícone de carregamento.

Chame setDropDownViewResource(int) para especificar o layout que o adaptador usa para mostrar a lista de opções do ícone de carregamento. simple_spinner_dropdown_item é outro layout padrão definido pela plataforma.

Chame setAdapter() para aplicar o adaptador à Spinner.

Responder às seleções do usuário

Quando o usuário seleciona um item no menu do ícone de carregamento, o objeto Spinner recebe um evento selecionado no item.

Para definir o manipulador de eventos de seleção para um ícone de carregamento, implemente a interface AdapterView.OnItemSelectedListener e o método de callback onItemSelected() correspondente. Por exemplo, veja uma implementação da interface em um Activity:

Kotlin

class SpinnerActivity : Activity(), AdapterView.OnItemSelectedListener {
    ...
    override fun onItemSelected(parent: AdapterView<*>, view: View?, pos: Int, id: Long) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    override fun onNothingSelected(parent: AdapterView<*>) {
        // Another interface callback.
    }
}

Java

public class SpinnerActivity extends Activity implements OnItemSelectedListener {
    ...
    public void onItemSelected(AdapterView<?> parent, View view,
            int pos, long id) {
        // An item is selected. You can retrieve the selected item using
        // parent.getItemAtPosition(pos).
    }

    public void onNothingSelected(AdapterView<?> parent) {
        // Another interface callback.
    }
}

A interface AdapterView.OnItemSelectedListener requer os métodos de callback onItemSelected() e onNothingSelected().

Especifique a implementação da interface chamando setOnItemSelectedListener():

Kotlin

val spinner: Spinner = findViewById(R.id.planets_spinner)
spinner.onItemSelectedListener = this

Java

Spinner spinner = (Spinner) findViewById(R.id.planets_spinner);
spinner.setOnItemSelectedListener(this);

Se você implementar a interface AdapterView.OnItemSelectedListener com sua Activity ou Fragment, como no exemplo anterior, poderá transmitir this como a instância da interface.