Sobes.tech
Middle

Hogyan változtatható meg a RecyclerView oszlopainak száma úgy, hogy portré módban egy oszlop, tájkép módban pedig két vagy több oszlop jelenjen meg?

sobes.tech MI

Válasz az MI-től

Használhatja a GridLayoutManager-t.

Az oszlopok számának módosításához az képernyőorientációtól függően, az alábbiakat kell tenni:

  1. Szerezze meg az eszköz aktuális orientációját.
  2. Az orientációtól függően hozzon létre egy GridLayoutManager-t a szükséges oszlopok számával, és állítsa be a RecyclerView-ra.

Példa:

// Az aktivitásban vagy fragmentben, ahol a RecyclerView-t használják
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 inicializálása ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Egy oszlop portré módban
    } else {
        2 // Két oszlop tájolásban
        // Használhat más értéket is, például 3, 4 stb.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

A különböző orientációkhoz erőforrásokban (dimens.xml) is megadhatja az oszlopok számát:

Hozzon létre res/values/dimens.xml:

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

Hozzon létre res/values-land vagy res/values-sw600dp-land (tabletekhez) dimens.xml:

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

És ezután használja ezt az erőforrást a kódban:

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

Ez a megközelítés rugalmasabb, mivel könnyen módosítható az oszlopok száma anélkül, hogy a kódot kellene változtatni.