RecyclerView 用のカスタムの LayoutManager および ItemDecoration

重要

この記事では、パブリック プレビュー段階であり、一般公開前に大幅に変更される可能性がある機能とガイダンスについて説明します。 本書に記載された情報について、Microsoft は明示または黙示を問わずいかなる保証をするものでもありません。

FoldableLayoutManagerLinearLayoutManager のラッパーであり、アプリがディスプレイにスパンされているかどうかに応じて 1 つまたはもう一方を提供する GridLayoutManager です。

FoldableItemDecoration は、アプリがスパンされ、FoldableLayoutManager が使用されるときにヒンジ (存在する場合) に覆われないように 、2 つの列間に余白を作成する RecyclerView.ItemDecoration の実装です。

シングルスクリーンでは、FoldableLayoutManagerFoldableItemDecoration を使用する RecyclerView は通常通り表示されます。

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

スパン モードでは、FoldableLayoutManagerFoldableItemDecoration を使用する RecyclerView により 2 つの画面間でコンテンツが分割されます。

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

1.0.0-beta4 バージョンから、FoldableLayoutManagerFoldableItemDecoration を使用する RecyclerView は、折りたたみ型デバイスでも 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 and FoldableStaggeredItemDecoration

また、FoldableStaggeredItemDecoration とともに使う必要のある FoldableStaggeredLayoutManager を含めることで、StaggeredGridLayoutManager をデュアルスクリーン モードにする方法もあります。

シングルスクリーンでは、FoldableStaggeredLayoutManagerFoldableStaggeredItemDecoration を使用する RecyclerView は通常通り表示されます。

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

スパン モードでは、FoldableStaggeredLayoutManagerFoldableStaggeredItemDecoration を使用する RecyclerView により 2 つの画面間でコンテンツが分割されます。

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

1.0.0-beta4 バージョンからは、FoldableStaggeredLayoutManagerFoldableStaggeredItemDecoration を使用する RecyclerView は、折りたたみ型デバイスでも 2 つの画面間でコンテンツを分割して表示します。 例えば、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))
    }
}