Sobes.tech
Middle

Comment modifier le nombre de colonnes dans RecyclerView pour qu'une colonne s'affiche en orientation portrait, et deux ou plus en orientation paysage?

sobes.tech IA

Réponse de l'IA

Vous pouvez utiliser GridLayoutManager.

Pour changer le nombre de colonnes en fonction de l'orientation de l'écran, il faut:

  1. Obtenir l'orientation actuelle de l'appareil.
  2. En fonction de l'orientation, créer un GridLayoutManager avec le nombre de colonnes approprié et le définir pour le RecyclerView.

Exemple:

// Dans l'activité ou le fragment où le RecyclerView est utilisé
override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    updateColumnCount(newConfig.orientation)
}

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    // ... initialisation du RecyclerView ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Une colonne en mode portrait
    } else {
        2 // Deux colonnes en mode paysage
        // Vous pouvez utiliser une autre valeur, par exemple 3, 4, etc.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Il est également possible de définir le nombre de colonnes dans les ressources (dimens.xml) pour différentes orientations:

Créer res/values/dimens.xml:

<resources>
    <integer name="grid_span_count">1</integer>
</resources>

Créer res/values-land ou res/values-sw600dp-land (pour tablettes) dimens.xml:

<resources>
    <integer name="grid_span_count">2</integer>
</resources>

Et utiliser cette ressource dans le code:

recyclerView.layoutManager = GridLayoutManager(this, resources.getInteger(R.integer.grid_span_count))

Cette approche est plus flexible, car elle permet de changer facilement le nombre de colonnes sans modifier le code.