🚀 3.5 Spinner

O Spinner é o componente clássico do Android para seleção de itens em uma lista suspensa (dropdown). No Material Design moderno, ele é frequentemente substituído por menus suspensos expostos (Exposed Dropdown Menus), mas o Spinner continua sendo uma ferramenta fundamental e eficiente para formulários simples.

Configuração no Layout XML

No arquivo gasto.xml, declaramos o Spinner com o atributo android:prompt para indicar o título da seleção:

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="@string/categoria" 
    style="@style/LabelItem" />
 
<Spinner
    android:id="@+id/spinnerCategoria"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:prompt="@string/categoria" />

Definindo Opções (re/values/strings.xml)

Armazenamos as opções em um string-array para facilitar a manutenção e tradução:

<string-array name="categorias_gasto">
    <item>Alimentação</item>
    <item>Hospedagem</item>
    <item>Transporte</item>
    <item>Lazer</item>
    <item>Outros</item>
</string-array>

Vinculação de Dados (Java 17 & ViewBinding)

Utilizamos um ArrayAdapter para carregar as opções e vinculá-las ao Spinner via ViewBinding:

// GastoActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    binding = ActivityGastoBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());
 
    // Criando o adaptador com o layout padrão do sistema
    var adapter = ArrayAdapter.createFromResource(
            this, 
            R.array.categorias_gasto,
            android.R.layout.simple_spinner_item
    );
 
    // Definindo o layout de dropdown
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
    // Vinculando ao Spinner
    binding.spinnerCategoria.setAdapter(adapter);
}

TIP

O método setDropDownViewResource garante que os itens da lista suspensa tenham o espaçamento correto para toque em dispositivos móveis, seguindo os padrões de acessibilidade.

NOTE

Ao utilizar var, o compilador do Java 17 deduz o tipo ArrayAdapter<CharSequence>, mantendo o código conciso e elegante sem abrir mão da segurança de tipos.


⬅️ Capítulo Anterior | Próximo Capítulo ➡️