Как сделать разное отображение RecyclerView для разных ориентаций устройства

«Как сделать разное отображение RecyclerView для разных ориентаций устройства» — вопрос из категории UI и Views, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для разных ориентаций можно использовать разные LayoutManager или XML-разметки.

1. Разные LayoutManager:

val layoutManager = if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
    GridLayoutManager(this, 3) // 3 колонки в альбомной
} else {
    LinearLayoutManager(this) // список в портретной
}
recyclerView.layoutManager = layoutManager

2. Разные XML-разметки:
Создайте папки layout-land и layout-port в res, поместите туда разные XML с RecyclerView.

3. Динамическое изменение spanCount в GridLayoutManager:

recyclerView.addOnLayoutChangeListener { _, _, _, _, _, _, _, _, _ ->
    val spanCount = if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) 3 else 2
    (recyclerView.layoutManager as GridLayoutManager).spanCount = spanCount
}

Также можно использовать ConfigurationChanged в Activity/Fragment.