Sobes.tech
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:

  1. Obter a orientação atual do dispositivo.
  2. Dependendo da orientação, criar um GridLayoutManager com o número necessário de colunas e defini-lo para o RecyclerView.

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.