Sobes.tech
Middle

Чӣ гуна тағйир додани шумораи сутунҳо дар RecyclerView, то ки дар портрет як сутун ва дар ландшафт ду ё бештар аз ду сутун нишон дода шавад?

sobes.tech AI

Ҷавоб аз AI

Можете да използвате 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))

Този подход е по-гъвкав, тъй като позволява лесно да се променя броят на колоните без измене на кода.