3.

Android アプリでメッセージを表示する方法(Toast / Snackbar / AlertDialog / 通知の使い分け)

編集
この記事の要点
  • Android では用途と緊急度でメッセージ表示手段を使い分ける
  • Toast: 短時間表示、操作不可、補足情報用 (例: 保存完了)
  • Snackbar: 画面下から表示、アクションボタン付き (例: 元に戻す)
  • AlertDialog: モーダル、ユーザーの応答待ち (例: 削除確認)
  • Notification: アプリ外/バックグラウンドでもユーザーに通知

Android アプリにおけるメッセージ表示の選択肢

Android アプリでユーザーへメッセージを伝える方法は複数あり、それぞれ目的・緊急度・ユーザー操作の有無で使い分けます。安易に Toast ばかり使うのではなく、適切な UI コンポーネントを選びましょう。

主要な手段の比較

手段表示位置操作用途
Toast画面下中央不可軽い補足通知 (保存完了など)
Snackbar画面下端アクション 1 個まで取り消し可能な操作通知
AlertDialog画面中央 (モーダル)ボタン応答必須確認 / 警告 / 入力
Notificationステータスバー / 通知センタータップで遷移バックグラウンド/常駐通知
TextView 等の表示レイアウト内-常時表示するメッセージ

1. Toast — 短時間の補足通知

画面下に数秒だけ表示される非モーダルのメッセージ。操作はできず、自動で消えます。「保存しました」「メール送信完了」のような軽い情報向き。

// Kotlin
Toast.makeText(context, "保存しました", Toast.LENGTH_SHORT).show()

// 長め表示
Toast.makeText(context, "ネットワーク接続を確認してください", Toast.LENGTH_LONG).show()
// Java
Toast.makeText(this, "保存しました", Toast.LENGTH_SHORT).show();
定数長さ
Toast.LENGTH_SHORT約 2 秒
Toast.LENGTH_LONG約 3.5 秒

注意: Android 11 以降、サードパーティアプリは Toast のカスタムビューが非推奨。テキストのみが推奨されます。

2. Snackbar — アクション付き通知

Material Design 推奨。画面下端から表示され、「元に戻す」など 1 つのアクションボタンを付けられます。Toast の上位互換と考えてよい。

// Kotlin (Material Components 必要)
import com.google.android.material.snackbar.Snackbar

Snackbar.make(rootView, "アイテムを削除しました", Snackbar.LENGTH_LONG)
    .setAction("元に戻す") {
        // 削除を取り消す処理
        viewModel.undoDelete()
    }
    .show()
定数長さ
Snackbar.LENGTH_SHORT短時間
Snackbar.LENGTH_LONG長め
Snackbar.LENGTH_INDEFINITE明示的に dismiss するまで表示

3. AlertDialog — モーダル確認

ユーザーの応答を必須とする確認ダイアログ。削除確認や規約同意など、操作を中断させる場面で使います。

// Kotlin (AndroidX AppCompat)
AlertDialog.Builder(this)
    .setTitle("削除確認")
    .setMessage("このアイテムを完全に削除しますか?\n この操作は元に戻せません。")
    .setPositiveButton("削除") { dialog, _ ->
        viewModel.delete()
        dialog.dismiss()
    }
    .setNegativeButton("キャンセル") { dialog, _ ->
        dialog.dismiss()
    }
    .setNeutralButton("後で") { dialog, _ ->
        dialog.dismiss()
    }
    .show()

4. Notification — アプリ外でも届く通知

ステータスバー / 通知センターに表示される通知。アプリがバックグラウンドでもユーザーに気づいてもらえます。チャットの新着メッセージ、ダウンロード完了などの非同期通知向き。

// Kotlin
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat

// チャンネルを事前作成 (Android 8.0 以上で必須)
val channel = NotificationChannel(
    "default",
    "通常通知",
    NotificationManager.IMPORTANCE_DEFAULT
)
notificationManager.createNotificationChannel(channel)

// 通知を作成
val notification = NotificationCompat.Builder(this, "default")
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle("新着メッセージ")
    .setContentText("田中さんからのメッセージ")
    .setPriority(NotificationCompat.PRIORITY_DEFAULT)
    .build()

NotificationManagerCompat.from(this).notify(1, notification)

注意: Android 13 以降は POST_NOTIFICATIONS 権限のランタイム許可が必要。

5. TextView などレイアウト内の常時表示

エラーメッセージや状態表示などはレイアウトの一部として常時表示するのが UX として良いことが多い。Snackbar / Toast に頼りすぎない設計を。

<TextView
    android:id="@+id/error_message"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textColor="@color/error"
    android:visibility="gone" />
// 表示制御
errorMessage.text = "ネットワーク接続を確認してください"
errorMessage.isVisible = true

使い分け早見表

シーン推奨
保存完了Toast / Snackbar
削除直後 (取り消し可)Snackbar
削除前の確認AlertDialog
入力エラーTextInputLayout の error / TextView
新着通知 (バックグラウンド)Notification
権限要求システムダイアログ + 説明文

FAQ

Q: Toast と Snackbar はどっちを使えばいい?
A: Material Design 準拠なら原則 Snackbar。アクションが不要で本当に軽い通知だけなら Toast でも可。

Q: AlertDialog がメモリリークする
A: Activity の Context を保持するため、向き変更で再生成された Activity を参照したまま残ると漏れる。Lifecycle 連携や onDismiss で参照を解放。

Q: Jetpack Compose ではどう?
A: SnackbarHost + SnackbarHostStateAlertDialog コンポーザブル。Toast は Compose ネイティブにはないため android.widget.Toast を呼ぶ。

編集
Post Share
子ページ
  1. Toastクラス
同階層のページ
  1. リソース (Android アプリケーション)
  2. アクティビティ (Android アプリケーション)
  3. メッセージの表示
  4. データベースの操作 (Android アプリケーション)

最近更新/作成されたページ