Поделиться через


Пользовательские LayoutManager и ItemDecoration для RecyclerView

Важно!

В этой статье описаны функциональные возможности общедоступной ознакомительной версии, а также инструкции по ее использованию. Сведения могут быть существенно изменены, прежде чем версия станет общедоступной. Майкрософт не дает никаких гарантий, явных или подразумеваемых, в отношении предоставленной здесь информации.

FoldableLayoutManager — это оболочка над LinearLayoutManager и GridLayoutManager, которая предоставляет один из этих классов в зависимости от того, развернуто ли приложение на экранах или нет.

FoldableItemDecoration — это реализация класса RecyclerView.ItemDecoration, которая создает поле между двумя столбцами, чтобы их не закрывала петля (при ее наличии), если приложение развернуто и используется FoldableLayoutManager.

На одном экране RecyclerView, использующий FoldableLayoutManager и FoldableItemDecoration, будет выглядеть обычным образом:

Surface Duo Emulator displaying an application on the left screen with items of the same size

В развернутом режиме RecyclerView, использующий FoldableLayoutManager и FoldableItemDecoration, разделит содержимое между двумя экранами:

Surface Duo Emulator displaying a spanned application with items of the same size

Начиная с версии 1.0.0-beta4 RecyclerView, использующий FoldableLayoutManager и FoldableItemDecoration, также разделяет содержимое между FoldingFeature на складных устройствах. Например, вот как это будет выглядеть на эмуляторе с горизонтальным складыванием с диагональю 6,7":

Foldable Emulator displaying an application on the whole screen with items of the same size

class MainActivity : AppCompatActivity() {
//...
    
    private fun onWindowLayoutInfoChanged(windowLayoutInfo: WindowLayoutInfo) {
        recyclerView.layoutManager = FoldableLayoutManager(this, windowLayoutInfo).get()
        recyclerView.replaceItemDecorationAt(FoldableItemDecoration(windowLayoutInfo))
    }
}

FoldableStaggeredLayoutManager и FoldableStaggeredItemDecoration

Существует также способ использовать StaggeredGridLayoutManager в режиме двойного экрана путем включения FoldableStaggeredLayoutManager, используемого вместе с FoldableStaggeredItemDecoration.

На одном экране RecyclerView, использующий FoldableStaggeredLayoutManager и FoldableStaggeredItemDecoration, будет выглядеть обычным образом:

Surface Duo Emulator displaying an application on the left screen with items of variable sizes

В развернутом режиме RecyclerView, использующий FoldableStaggeredLayoutManager и FoldableStaggeredItemDecoration, разделит содержимое между двумя экранами:

Surface Duo Emulator displaying a spanned application with items of variable sizes

Начиная с версии 1.0.0-beta4 RecyclerView, использующий FoldableStaggeredLayoutManager и FoldableStaggeredItemDecoration, также разделяет содержимое между двумя экранами на складных устройствах. Например, вот как это будет выглядеть на эмуляторе с горизонтальным складыванием с диагональю 6,7":

Foldable Emulator displaying an application on the whole screen with items of variable sizes

class MainActivity : AppCompatActivity() {
//...
    
    private fun onWindowLayoutInfoChanged(windowLayoutInfo: WindowLayoutInfo) {
        recyclerView.layoutManager = FoldableStaggeredLayoutManager(this, windowLayoutInfo).get()
        recyclerView.replaceItemDecorationAt(FoldableStaggeredItemDecoration(windowLayoutInfo))
    }
}