Sobes.tech
Middle

Kako promeniti broj kolona u RecyclerView tako da u portretnoj orijentaciji bude prikazana jedna kolona, a u pejzažnoj - dve ili više kolona?

sobes.tech АИ

Одговор од АИ

Можете да користите GridLayoutManager.

За промену броја колона у зависности од оријентације екрана, потребно је:

  1. Да добијете тренутну оријентацију уређаја.
  2. У зависности од оријентације, да креирате GridLayoutManager са потребним бројем колона и да га поставите за RecyclerView.

Пример:

// У активност или фрагмент где се користи 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-а ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Једна колона у портрет оријентацији
    } else {
        2 // Две колоне у пејзаж оријентацији
        // Може се користити и друга вредност, нпр. 3, 4 итд.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Такође можете дефинисати број колона у ресурсима (dimens.xml) за различите оријентације:

Креирајте res/values/dimens.xml:

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

Креирајте res/values-land или res/values-sw600dp-land (за таблете) dimens.xml:

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

И онда користите овај ресурс у коду:

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

Овај приступ је флексибилнији, јер омогућава лако промену броја колона без измене кода.