共用方式為


RecyclerView 的自訂 LayoutManager 和 ItemDecoration

重要

本文說明 處於公開預覽 狀態的功能和指引,而且可能會在正式推出之前大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

FoldableLayoutManagerLinearLayoutManagerGridLayoutManager的包裝函式,會根據應用程式是否跨越顯示器提供一個或另一個。

FoldableItemDecorationRecyclerView.ItemDecoration的實作,會在兩個數據行之間建立邊界,使其不會受到轉軸 (所涵蓋,以防應用程式跨越並使用 FoldableLayoutManager 時) 。

在單一畫面上,使用 FoldableLayoutManager 和 的 FoldableItemDecoration RecyclerView 看起來會像往常一樣:

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

在跨越模式中,使用 FoldableLayoutManagerFoldableItemDecoration 的 RecyclerView 會在兩個畫面之間分割內容:

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

1.0.0-beta4從版本開始,使用 FoldableLayoutManagerFoldableItemDecoration RecyclerView 也會將內容分割到可折迭裝置上的 FoldingFeature。 例如,這是 6.7「 水準折迭Emulator的外觀:

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

在單一畫面上,使用 FoldableStaggeredLayoutManager 和 的 FoldableStaggeredItemDecoration RecyclerView 看起來會像往常一樣:

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

在跨越模式中,使用 FoldableStaggeredLayoutManagerFoldableStaggeredItemDecoration 的 RecyclerView 會在兩個畫面之間分割內容:

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

1.0.0-beta4從版本開始,使用 FoldableStaggeredLayoutManagerFoldableStaggeredItemDecoration 的 RecyclerView 也會在可折迭裝置上的兩個畫面之間分割內容。 例如,這是 6.7「 水準折迭Emulator的外觀:

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