Sobes.tech
Middle

Kā mainīt RecyclerView kolonnu skaitu tā, lai portreta režīmā būtu viena kolonna, bet ainavas režīmā – divas vai vairāk kolonnas?

sobes.tech AI

Atbilde no AI

Jūs varat izmantot GridLayoutManager.

Lai mainītu kolonnu skaitu atkarībā no ekrāna orientācijas, jums jā:

  1. Iegūst pašreizējo ierīces orientāciju.
  2. Atkarībā no orientācijas, izveidot GridLayoutManager ar nepieciešamo kolonnu skaitu un to uzstādīt RecyclerView.

Piemērs:

// Aktīvajā vai fragmentā, kur tiek izmantots 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 inicializācija ...

    updateColumnCount(resources.configuration.orientation)
}

private fun updateColumnCount(orientation: Int) {
    val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
        1 // Viena kolonna portreta režīmā
    } else {
        2 // Divas kolonnas landskapa režīmā
        // Var izmantot citu vērtību, piemēram, 3, 4 utt.
    }

    recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}

Tāpat var definēt kolonnu skaitu resursos (dimens.xml) dažādām orientācijām:

Izveidojiet res/values/dimens.xml:

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

Izveidojiet res/values-land vai res/values-sw600dp-land (planšetēm) dimens.xml:

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

Un pēc tam izmantojiet šo resursu kodā:

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

Šī pieeja ir elastīgāka, jo ļauj viegli mainīt kolonnu skaitu, nemainot kodu.