Middle
Ako zmeniť počet stĺpcov v RecyclerView tak, aby pri portrétovom režime bola zobrazená jedna stĺpec a pri krajinnom režime dve alebo viac?
sobes.tech AI
Odpoveď od AI
Môžete použiť GridLayoutManager.
Na zmenu počtu stĺpcov v závislosti od orientácie obrazovky je potrebné:
- Získať aktuálnu orientáciu zariadenia.
- V závislosti od orientácie vytvoriť
GridLayoutManagers potrebným počtom stĺpcov a nastaviť ho preRecyclerView.
Príklad:
// V aktivite alebo fragmente, kde sa používa 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)
// ... inicializácia RecyclerView ...
updateColumnCount(resources.configuration.orientation)
}
private fun updateColumnCount(orientation: Int) {
val spanCount = if (orientation == Configuration.ORIENTATION_PORTRAIT) {
1 // Jeden stĺpec na výšku
} else {
2 // Dva stĺpce na šírku
// Môžete použiť aj inú hodnotu, napr. 3, 4 atď.
}
recyclerView.layoutManager = GridLayoutManager(this, spanCount)
}
Tiež môžete definovať počet stĺpcov v zdrojoch (dimens.xml) pre rôzne orientácie:
Vytvorte res/values/dimens.xml:
<resources>
<integer name="grid_span_count">1</integer>
</resources>
Vytvorte res/values-land alebo res/values-sw600dp-land (pre tablety) dimens.xml:
<resources>
<integer name="grid_span_count">2</integer>
</resources>
A potom použite tento zdroj v kóde:
recyclerView.layoutManager = GridLayoutManager(this, resources.getInteger(R.integer.grid_span_count))
Tento prístup je flexibilnejší, pretože umožňuje ľahko meniť počet stĺpcov bez úpravy kódu.