Sobes.tech
Middle

Kuidas muuta RecyclerView veergude arvu nii, et portreevaates kuvatakse üks veerg ja maastikuvaates kaks või rohkem veerge?

sobes.tech AI

Vastus AI-lt

Võite kasutada GridLayoutManager.

Kolonite arvu muutmiseks sõltuvalt ekraani orientatsioonist, peate:

  1. Saama praeguse seadme orientatsiooni.
  2. Sõltuvalt orientatsioonist, looma GridLayoutManager vajaliku arvuga veerge ja määrama selle RecyclerView-le.

Näide:

// Tegevuses või fragmendis, kus kasutatakse 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 initsialiseerimine ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Üks veerg portree-režiimis
    } else {
        2 // Kaks veerg maastiku-režiimis
        // Võid kasutada teist väärtust, näiteks 3, 4 jne.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Samuti saab määrata veergude arvu ressurssides (dimens.xml) erinevate orientatsioonide jaoks:

Loo res/values/dimens.xml:

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

Loo res/values-land või res/values-sw600dp-land ( tahvelarvutite jaoks) dimens.xml:

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

Ja kasuta seda ressurssi koodis:

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

See lähenemine on paindlikum, kuna võimaldab hõlpsasti muuta veergude arvu ilma koodi muutmata.