Sobes.tech
Middle

Kaip pakeisti RecyclerView stulpelių skaičių, kad portreto režimu būtų rodoma viena stulpelis, o peizažo režimu – du ar daugiau stulpelių?

sobes.tech AI

Atsakymas iš AI

Galima naudoti GridLayoutManager.

Norint keisti stulpelių skaičių priklausomai nuo ekrano orientacijos, reikia:

  1. Gauti įrenginio dabartinę orientaciją.
  2. Priklausomai nuo orientacijos, sukurti GridLayoutManager su reikiamu stulpelių skaičiumi ir jį nustatyti RecyclerView.

Pavyzdys:

// Veikloje arba fragmento, kur naudojamas 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)

    // ... RecyclerView inicijavimas ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Vienas stulpelis portreto režimu
    } else {
        2 // Du stulpeliai landšafto režimu
        // Galima naudoti kitą reikšmę, pvz., 3, 4 ir t.t.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Taip pat galima apibrėžti stulpelių skaičių resursuose (dimens.xml) skirtingoms orientacijoms:

Sukurkite res/values/dimens.xml:

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

Sukurkite res/values-land arba res/values-sw600dp-land (planšetėms) dimens.xml:

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

Ir tada naudokite šį resursą kode:

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

Šis požiūris yra lankstesnis, nes leidžia lengvai keisti stulpelių skaičių be kodo keitimo.