Benutzerdefinierter LayoutManager und ItemDecoration für RecyclerView

Wichtig

In diesem Artikel werden Funktionen und Anleitungen beschrieben, die sich in der öffentlichen Vorschau befinden und vor der allgemeinen Verfügbarkeit noch wesentlich geändert werden können. Microsoft übernimmt keine Garantie, weder ausdrücklich noch stillschweigend, für die hier bereitgestellten Informationen.

Der FoldableLayoutManager ist ein Wrapper über einem LinearLayoutManager und einem GridLayoutManager, der den einen oder den anderen zur Verfügung stellt, je nachdem, ob die App im bildschirmübergreifenden Modus ausgeführt wird oder nicht.

Der FoldableItemDecoration ist eine Implementierung einer RecyclerView.ItemDecoration, die einen Steg zwischen den zwei Spalten erstellt, sodass sie nicht vom Scharnier überdeckt werden (falls eins vorhanden ist), wenn die App im bildschirmübergreifenden Modus ausgeführt wird und der FoldableLayoutManager verwendet wird.

Auf einem Einzelbildschirm sieht eine RecyclerView, die den FoldableLayoutManager und FoldableItemDecoration verwendet, wie gewohnt aus:

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

Im bildschirmübergreifenden Modus teilt eine Recycler-Ansicht, die FoldableLayoutManager und FoldableItemDecoration nutzt, den Inhalt auf die beiden Bildschirme auf:

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

Seit Version 1.0.0-beta4 teilt eine RecyclerView, die FoldableLayoutManager und FoldableItemDecoration nutzt, den Inhalt auf faltbaren Geräten auch über das FoldingFeature hinweg. Hier sehen Sie ein Beispiel, wie das auf dem 6,7-Zoll Horizontal Fold-in-Emulator aussieht:

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 und FoldableStaggeredItemDecoration

Es gibt außerdem eine Möglichkeit, den StaggeredGridLayoutManager im Dual-Screen-Modus zu nutzen, indem der FoldableStaggeredLayoutManager einbezogen wird, der zusammen mit FoldableStaggeredItemDecoration verwendet werden sollte.

Auf einem Einzelbildschirm sieht eine RecyclerView, die den FoldableStaggeredLayoutManager und FoldableStaggeredItemDecoration verwendet, wie gewohnt aus:

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

Im bildschirmübergreifenden Modus teilt eine Recycler-Ansicht, die FoldableStaggeredLayoutManager und FoldableStaggeredItemDecoration nutzt, den Inhalt auf die beiden Bildschirme auf:

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

Seit Version 1.0.0-beta4 teilt eine RecyclerView, die FoldableStaggeredLayoutManager und FoldableStaggeredItemDecoration nutzt, den Inhalt auf faltbaren Geräten ebenfalls auf die zwei Bildschirme auf. Hier sehen Sie ein Beispiel, wie das auf dem 6,7-Zoll Horizontal Fold-in-Emulator aussieht:

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))
    }
}