Sobes.tech
Middle

Jak zmienić liczbę kolumn w RecyclerView tak, aby w orientacji pionowej wyświetlała się jedna kolumna, a w poziomej dwie lub więcej?

sobes.tech AI

Odpowiedź od AI

Możesz użyć GridLayoutManager.

Aby zmienić liczbę kolumn w zależności od orientacji ekranu, należy:

  1. Uzyskać aktualną orientację urządzenia.
  2. W zależności od orientacji, utworzyć GridLayoutManager z odpowiednią liczbą kolumn i ustawić go dla RecyclerView.

Przykład:

// W aktywności lub fragmencie, gdzie używany jest 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)

    // ... inicjalizacja RecyclerView ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Jedna kolumna w orientacji pionowej
    } else {
        2 // Dwie kolumny w orientacji poziomej
        // Możesz użyć innej wartości, np. 3, 4 itd.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Możesz również zdefiniować liczbę kolumn w zasobach (dimens.xml) dla różnych orientacji:

Utwórz res/values/dimens.xml:

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

Utwórz res/values-land lub res/values-sw600dp-land (dla tabletów) dimens.xml:

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

A następnie użyj tego zasobu w kodzie:

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

Ten sposób jest bardziej elastyczny, ponieważ pozwala na łatwą zmianę liczby kolumn bez modyfikacji kodu.