ボトムシートの一部

ボトムシートを部分的に表示してから、ユーザーが全画面表示にするか閉じられるようにできます。

これを行うには、skipPartiallyExpandedfalse に設定した SheetState のインスタンスを ModalBottomSheet に渡します。

この例は、ModalBottomSheetsheetState プロパティを使用して、最初はシートの一部のみを表示する方法を示しています。

@Composable
fun PartialBottomSheet() {
    var showBottomSheet by remember { mutableStateOf(false) }
    val sheetState = rememberModalBottomSheetState(
        skipPartiallyExpanded = false,
    )

    Column(
        modifier = Modifier.fillMaxWidth(),
        horizontalAlignment = Alignment.CenterHorizontally,
    ) {
        Button(
            onClick = { showBottomSheet = true }
        ) {
            Text("Display partial bottom sheet")
        }

        if (showBottomSheet) {
            ModalBottomSheet(
                modifier = Modifier.fillMaxHeight(),
                sheetState = sheetState,
                onDismissRequest = { showBottomSheet = false }
            ) {
                Text(
                    "Swipe up to open sheet. Swipe down to dismiss.",
                    modifier = Modifier.padding(16.dp)
                )
            }
        }
    }
}

コードに関する主なポイント

この例では、次のことに注意してください。

  • showBottomSheet は、アプリにボトムシートを表示するかどうかを制御します。
  • sheetStateSheetState のインスタンスです。ここで skipPartiallyExpanded は false です。
  • ModalBottomSheet は、完全に展開されたときに画面全体に表示されるようにする修飾子を取ります。
  • ModalBottomSheet は、sheetState パラメータの値として sheetState を取ります。
    • そのため、シートを初めて開いたときには一部しか表示されません。ユーザーは、アイコンをドラッグまたはスワイプすることで、全画面表示にしたり、閉じたりできます。
  • onDismissRequest ラムダは、ユーザーがボトムシートを閉じようとしたときに何が起きるかを制御します。この場合は、シートのみが削除されます。

結果

ユーザーがボタンを最初に押すと、シートの一部が表示されます。

最初は画面の一部にのみ表示されるボトムシート。ユーザーはスワイプして画面全体に表示したり、閉じたりできます
図 1. 一部表示されたボトムシート。

ユーザーがシートを上にスワイプすると、シートが画面全体に表示されます。

ユーザーが全画面表示に展開したボトムシート。
図 2. 全画面ボトムシート。

参考情報