🚀 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
setDropDownViewResourcegarante 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 tipoArrayAdapter<CharSequence>, mantendo o código conciso e elegante sem abrir mão da segurança de tipos.