Sobes.tech
Middle

Ako zmeniť počet stĺpcov v RecyclerView tak, aby pri portrétovom režime bola zobrazená jedna stĺpec a pri krajinnom režime dve alebo viac?

sobes.tech AI

Odpoveď od AI

Môžete použiť GridLayoutManager.

Na zmenu počtu stĺpcov v závislosti od orientácie obrazovky je potrebné:

  1. Získať aktuálnu orientáciu zariadenia.
  2. V závislosti od orientácie vytvoriť GridLayoutManager s potrebným počtom stĺpcov a nastaviť ho pre RecyclerView.

Príklad:

// V aktivite alebo fragmente, kde sa používa 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)

    // ... inicializácia RecyclerView ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Jeden stĺpec na výšku
    } else {
        2 // Dva stĺpce na šírku
        // Môžete použiť aj inú hodnotu, napr. 3, 4 atď.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Tiež môžete definovať počet stĺpcov v zdrojoch (dimens.xml) pre rôzne orientácie:

Vytvorte res/values/dimens.xml:

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

Vytvorte res/values-land alebo res/values-sw600dp-land (pre tablety) dimens.xml:

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

A potom použite tento zdroj v kóde:

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

Tento prístup je flexibilnejší, pretože umožňuje ľahko meniť počet stĺpcov bez úpravy kódu.