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:
- Uzyskać aktualną orientację urządzenia.
- W zależności od orientacji, utworzyć
GridLayoutManagerz odpowiednią liczbą kolumn i ustawić go dlaRecyclerView.
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.