Sobes.tech
Middle

Jak změnit počet sloupců v RecyclerView tak, aby se při portré režimu zobrazovala jedna sloupec, a při landscape režimu dva nebo více sloupců?

sobes.tech AI

Odpověď od AI

Můžete použít GridLayoutManager.

Pro změnu počtu sloupců v závislosti na orientaci obrazovky je třeba:

  1. Získat aktuální orientaci zařízení.
  2. V závislosti na orientaci vytvořit GridLayoutManager s potřebným počtem sloupců a nastavit ho pro RecyclerView.

Příklad:

// V aktivitě nebo fragmentu, kde se používá RecyclerView
override fun onConfigurationChanged(newConfig: Configuration) {
    super.onConfigurationChanged(newConfig)
    updateColumnCount(newConfig.orientation)
}

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

    // ... inicializace RecyclerView ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Jeden sloupec na výšku
    } else {
        2 // Dva sloupce na šířku
        // Můžete použít jinou hodnotu, například 3, 4 atd.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Také můžete definovat počet sloupců v zdrojích (dimens.xml) pro různé orientace:

Vytvořte res/values/dimens.xml:

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

Vytvořte res/values-land nebo res/values-sw600dp-land (pro tablety) dimens.xml:

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

A poté použijte tento zdroj v kódu:

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

Tento přístup je flexibilnější, protože umožňuje snadno měnit počet sloupců bez úpravy kódu.