Middle
Como alterar o número de colunas no RecyclerView para que, na orientação retrato, seja exibida uma coluna, e na orientação paisagem, duas ou mais colunas?
sobes.tech IA
Resposta da IA
Pode usar GridLayoutManager.
Para alterar o número de colunas dependendo da orientação do ecrã, deve:
- Obter a orientação atual do dispositivo.
- Dependendo da orientação, criar um
GridLayoutManagercom o número necessário de colunas e defini-lo para oRecyclerView.
Exemplo:
// No activity ou fragmento onde o RecyclerView é usado
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
updateColumnCount(newConfig.orientation)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// ... inicialização do RecyclerView ...
updateColumnCount(resources.configuration.orientation)
}
private fun updateColumnCount(orientation: Int) {
val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
1 // Uma coluna em orientação retrato
} else {
2 // Duas colunas em orientação paisagem
// Pode usar outro valor, por exemplo 3, 4, etc.
}
recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}
Também pode definir o número de colunas nos recursos (dimens.xml) para diferentes orientações:
Criar res/values/dimens.xml:
<resources>
<integer name="grid_span_count">1</integer>
</resources>
Criar res/values-land ou res/values-sw600dp-land (para tablets) dimens.xml:
<resources>
<integer name="grid_span_count">2</integer>
</resources>
E depois usar esse recurso no código:
recyclerView.layoutManager = GridLayoutManager(this, resources.getInteger(R.integer.grid_span_count))
Esta abordagem é mais flexível, pois permite alterar facilmente o número de colunas sem modificar o código.