Dialog
コンポーネントは、ポップアップ メッセージを表示するか、
レイヤに配置できます。これにより、中断を伴う UI エクスペリエンスが生み出され、
ユーザーの注意を引くことができます
ダイアログのユースケースには次のようなものがあります。
- ユーザーの操作を確認する(ファイルの削除時など)。
- ToDo リスト アプリなどでユーザー入力をリクエストする。
- ユーザー選択のオプションのリストを提示する(たとえば、 プロファイル設定です。
通知ダイアログ
AlertDialog
コンポーザブルは、
マテリアル デザインをテーマにしたダイアログ。AlertDialog
には次のパラメータがあります。
ダイアログの特定の要素を処理しますその一例は次のとおりです。
title
: ダイアログの上部に表示されるテキスト。text
: ダイアログ内で中央に表示されるテキスト。icon
: ダイアログの上部に表示されるグラフィック。onDismissRequest
: ユーザーがダイアログを閉じると呼び出される関数。 画面の外側をタップするといった操作です。dismissButton
: 閉じるボタンとして機能するコンポーザブル。confirmButton
: 確認ボタンとして機能するコンポーザブル。
次の例では、アラート ダイアログに 2 つのボタンを実装しています。 ダイアログを閉じるコマンドと、リクエストを確認するコマンドの 2 つです。
@OptIn(ExperimentalMaterial3Api::class) @Composable fun AlertDialogExample( onDismissRequest: () -> Unit, onConfirmation: () -> Unit, dialogTitle: String, dialogText: String, icon: ImageVector, ) { AlertDialog( icon = { Icon(icon, contentDescription = "Example Icon") }, title = { Text(text = dialogTitle) }, text = { Text(text = dialogText) }, onDismissRequest = { onDismissRequest() }, confirmButton = { TextButton( onClick = { onConfirmation() } ) { Text("Confirm") } }, dismissButton = { TextButton( onClick = { onDismissRequest() } ) { Text("Dismiss") } } ) }
この実装は、親コンポーザブルが引数を 子コンポーザブルを次のようにします。
@Composable fun DialogExamples() { // ... val openAlertDialog = remember { mutableStateOf(false) } // ... when { // ... openAlertDialog.value -> { AlertDialogExample( onDismissRequest = { openAlertDialog.value = false }, onConfirmation = { openAlertDialog.value = false println("Confirmation registered") // Add logic here to handle confirmation. }, dialogTitle = "Alert dialog example", dialogText = "This is an example of an alert dialog with buttons.", icon = Icons.Default.Info ) } } } }
これを実装すると次のようになります。
<ph type="x-smartling-placeholder">![閉じるボタンと確認ボタンの両方があるアラート ダイアログが開いている。](https://developer.android.com/static/develop/ui/compose/images/components/dialog-alert.png?authuser=8&hl=ja)
Dialog コンポーザブル
Dialog
は基本的なコンポーザブルであり、スタイル設定や
コンテンツ用の事前定義スロットを使用できますこれは比較的シンプルなコンテナであり、
Card
などのコンテナを入力する必要があります。以下はその一部です。
ダイアログの主なパラメータは次のとおりです。
onDismissRequest
: ユーザーがダイアログを閉じたときに呼び出されるラムダ。properties
: いくつかの情報を提供するDialogProperties
のインスタンス カスタマイズの幅が広がります。
基本的な例
次の例は、Dialog
コンポーザブルの基本的な実装を示しています。備考
セカンダリ コンテナとして Card
を使用していることを確認します。Card
がない場合、Text
コンポーネントは、メインのアプリ コンテンツの上に単独で表示されます。
@Composable fun MinimalDialog(onDismissRequest: () -> Unit) { Dialog(onDismissRequest = { onDismissRequest() }) { Card( modifier = Modifier .fillMaxWidth() .height(200.dp) .padding(16.dp), shape = RoundedCornerShape(16.dp), ) { Text( text = "This is a minimal dialog", modifier = Modifier .fillMaxSize() .wrapContentSize(Alignment.Center), textAlign = TextAlign.Center, ) } } }
この実装は次のようになります。ダイアログを開くと、 その下のメインアプリのコンテンツが暗くグレー表示されます。
<ph type="x-smartling-placeholder">![ラベルのみを含むダイアログ。](https://developer.android.com/static/develop/ui/compose/images/components/dialog-minimal.png?authuser=8&hl=ja)
高度な例
以下は、Dialog
コンポーザブルのより高度な実装です。この
コンポーネントは、AlertDialog
と同様のインターフェースを手動で実装します。
使用します。
@Composable fun DialogWithImage( onDismissRequest: () -> Unit, onConfirmation: () -> Unit, painter: Painter, imageDescription: String, ) { Dialog(onDismissRequest = { onDismissRequest() }) { // Draw a rectangle shape with rounded corners inside the dialog Card( modifier = Modifier .fillMaxWidth() .height(375.dp) .padding(16.dp), shape = RoundedCornerShape(16.dp), ) { Column( modifier = Modifier .fillMaxSize(), verticalArrangement = Arrangement.Center, horizontalAlignment = Alignment.CenterHorizontally, ) { Image( painter = painter, contentDescription = imageDescription, contentScale = ContentScale.Fit, modifier = Modifier .height(160.dp) ) Text( text = "This is a dialog with buttons and an image.", modifier = Modifier.padding(16.dp), ) Row( modifier = Modifier .fillMaxWidth(), horizontalArrangement = Arrangement.Center, ) { TextButton( onClick = { onDismissRequest() }, modifier = Modifier.padding(8.dp), ) { Text("Dismiss") } TextButton( onClick = { onConfirmation() }, modifier = Modifier.padding(8.dp), ) { Text("Confirm") } } } } } }
これを実装すると次のようになります。
<ph type="x-smartling-placeholder">![ビクトリア州のフェザートップ山の写真が表示されたダイアログ。画像の下には閉じるボタンと確認ボタンがあります。](https://developer.android.com/static/develop/ui/compose/images/components/dialog-image.png?authuser=8&hl=ja)