この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:3
ページ更新者:guest
更新日時:2026-06-11 07:07:02

タイトル: Toastクラス
SEOタイトル: Android Toast クラス 完全ガイド(makeText / show / カスタム / Snackbar との違い)

この記事の要点
  • Toast は Android で画面下部に短時間表示される小窓メッセージを出すクラス
  • 基本構文: Toast.makeText(context, message, duration).show()
  • duration は Toast.LENGTH_SHORT (2秒) または Toast.LENGTH_LONG (3.5秒) のみ
  • メイン (UI) スレッドから呼ぶ必要あり。バックグラウンドスレッドからは Handler 経由で
  • Android 11+ ではアプリのカスタム Toast はバックグラウンドから出せない制約あり
  • 現代の推奨: 操作に対するフィードバックは Snackbar 推奨、通知は Notification

Toast クラスとは

Toast は Android で画面に短時間だけポップアップ表示される小さなメッセージ(トースト)を出すためのクラス(android.widget.Toast)です。「保存しました」「通信エラー」などの簡易フィードバックに古くから使われています。

名前の由来はパン焼き器から出てくるトーストのように下から出てきて消える挙動から。

基本構文

// Java
Toast toast = Toast.makeText(this, "メッセージ", Toast.LENGTH_LONG);
toast.show();

// より短く(チェイン)
Toast.makeText(this, "保存しました", Toast.LENGTH_SHORT).show();
// Kotlin
Toast.makeText(this, "保存しました", Toast.LENGTH_SHORT).show()

makeText の引数

引数意味
第 1 引数ContextActivity / Application などのコンテキスト
第 2 引数CharSequence または int (リソース ID)表示するメッセージ
第 3 引数int表示時間 (LENGTH_SHORT / LENGTH_LONG)

表示時間

定数実際の時間用途
Toast.LENGTH_SHORT約 2 秒軽いフィードバック
Toast.LENGTH_LONG約 3.5 秒少し長めの情報

任意の秒数は指定できません。長く表示したいときは Snackbar や Dialog を検討。

文字列リソースで国際化



    保存しました
    エラーが発生しました
// リソース ID を直接渡す
Toast.makeText(this, R.string.msg_saved, Toast.LENGTH_SHORT).show()

多言語対応するときもres/values-en/strings.xml などを用意すればロケールで自動切替されます。

位置の調整 (setGravity)

val toast = Toast.makeText(this, "上中央に表示", Toast.LENGTH_SHORT)
toast.setGravity(Gravity.TOP or Gravity.CENTER_HORIZONTAL, 0, 100)
toast.show()

第 2/3 引数は X / Y オフセット (px)。Android 11+ ではアプリ作成の Toast には setGravity が効かなくなりました(仕様変更)。

UI スレッド以外からの呼び出し

// バックグラウンドスレッドから直接 show() するとクラッシュ
// Handler / runOnUiThread で UI スレッドに戻す

// Activity 内
runOnUiThread {
    Toast.makeText(this, "完了", Toast.LENGTH_SHORT).show()
}

// View 経由
view.post {
    Toast.makeText(context, "完了", Toast.LENGTH_SHORT).show()
}

// Coroutine
lifecycleScope.launch(Dispatchers.Main) {
    Toast.makeText(this@MyActivity, "完了", Toast.LENGTH_SHORT).show()
}

カスタム Toast (旧スタイル)




    

    
val view = layoutInflater.inflate(R.layout.custom_toast, null)
view.findViewById(R.id.msg).text = "保存しました"

val toast = Toast(this)
toast.view = view
toast.duration = Toast.LENGTH_SHORT
toast.show()

注意: Android 11 (API 30) 以降、Toast.setView() によるカスタム Toast はバックグラウンドアプリから出せなくなり、API 30 で deprecated。アプリがフォアグラウンドのときに限り使えます。

Toast vs Snackbar vs Dialog

UI特徴推奨ケース
Toast短時間表示、操作不可、画面下に出る軽量な通知 (保存しました等)
Snackbar下部に表示、アクションボタン付けられる、UI ガイドライン準拠「削除しました [元に戻す]」のような操作付き
AlertDialogモーダル、ボタンで応答確認 / 重要決定
Notification通知バーに残るバックグラウンド完了 / アプリ外通知

現代の Material Design ガイドラインでは操作のフィードバックは Snackbar 推奨です。Toast はシンプルさが利点ですが、新規プロジェクトでは Snackbar を検討するのが定石。

Snackbar の基本例

// build.gradle: implementation 'com.google.android.material:material:1.x.x'

Snackbar.make(rootView, "削除しました", Snackbar.LENGTH_LONG)
    .setAction("元に戻す") {
        // 戻す処理
    }
    .show()

Toast 連発の制御

// 短時間に何度も呼ぶと前のが消えて新しいのに置き換わる挙動が望ましい
// 既存 Toast を cancel して入れ替える
private var currentToast: Toast? = null

fun showToast(msg: String) {
    currentToast?.cancel()
    currentToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT).apply { show() }
}

Android 12+ での見た目変更

Android 12 (API 31) 以降、システム Toast の見た目が変更され、アプリアイコン付きの小さなチップのような形になりました。これによりカスタマイズはほぼできなくなりましたが、OS で統一されたユーザー体験が得られます。

Toast の歴史と Android アプリ開発における位置づけ

Toast は Android 初期 (API 1, 2008 年リリース) から存在する非常に古い API で、当時はモバイルアプリ全般において「画面下に小さくメッセージが出てきて自動で消える」という UI パターン自体が新鮮でした。ユーザーの操作を中断せずに軽い情報を伝えられるこの仕組みは、シンプルかつ効果的だったため、多くのアプリで多用されてきました。

しかし時代が進み、Material Design ガイドラインが整備されてくると、「ユーザーがメッセージに対してアクションを取れない」「表示時間を細かく制御できない」「位置を自由に指定できない」といった Toast の制約が、現代の UX 要件と合わなくなってきました。Google は徐々に Toast の利用範囲を絞る方向に舵を切り、Android 11 以降ではバックグラウンドからのカスタム Toast を禁止し、Android 12 ではシステム Toast のデザイン自体を統一しました。これは「アプリごとに勝手な Toast を出してユーザー体験を混乱させる時代は終わり」というメッセージでもあります。

現代のフィードバック UI 選択指針

新規アプリで「画面上で軽く情報を伝えたい」要件が出てきたら、まずSnackbar を第一候補に検討するのが現代の定石です。Snackbar は Material Components ライブラリに含まれるコンポーネントで、画面下にスナックバーを表示し、アクションボタン(例: 元に戻す、再試行)を組み込めるため、ユーザーの直近操作に対するフィードバックとして自然に機能します。表示時間も柔軟に指定でき、複数のスナックバーが連続したときの挙動も標準で適切に処理されます。

Toast はまだ完全に時代遅れというわけではなく、「アプリ起動直後の軽い案内」「設定が保存されたことの簡単な通知」など、操作と直結しない情報を一瞬だけ見せたい場面ではむしろ Toast のシンプルさが活きます。重要なのは「フィードバックの種類と緊急度」を意識して、Toast、Snackbar、Dialog、Notification を使い分けることです。緊急かつ確認が必要なら Dialog、操作直後のフィードバックなら Snackbar、軽い通知なら Toast、アプリ外への通知なら Notification、という棲み分けを覚えておくと、Android アプリの UX 設計がぐっと洗練されます。

とくにエンタープライズ向けの業務アプリでは、ユーザー操作の結果を必ずフィードバックする設計が品質の鍵となります。何をしても画面が無反応だとユーザーは「処理が成功したのか失敗したのか」分からず、不安を抱えたまま操作を続けることになります。短いメッセージで「保存しました」「送信しました」を Toast や Snackbar で都度通知するだけで、アプリ全体の信頼感が大きく向上します。デザイン的に派手ではないものの、こうした地味なフィードバックの積み重ねがプロフェッショナルなアプリらしさを支えています。

テスト

// Espresso でテストする場合 (古い Toast)
// Toast はテストしにくいので、ロジック側のメッセージ生成は別関数化推奨

fun savedMessage(success: Boolean) =
    if (success) "保存しました" else "保存に失敗"

// テスト
assertEquals("保存しました", savedMessage(true))

FAQ

Q: Toast が表示されない
A: メインスレッドから呼んでいるか確認。背景スレッドから呼ぶと例外もなく無視される場合がある。

Q: 表示時間を 5 秒にしたい
A: 標準 API ではできない。Snackbar の setDuration(5000) や Handler で繰り返し show を呼ぶ等の回避策はあるが、UX 的には Snackbar 推奨。

Q: Activity が破棄されても Toast が出る?
A: ApplicationContext を渡せば出ます。Activity を渡している場合は表示前に破棄されると Toast も消える。

Q: Toast の中にボタンを置きたい
A: Snackbar の setAction を使う。Toast は操作を受け付けないのが仕様。

Q: makeText を呼ぶだけで show を忘れる
A: 表示されない。.show() 必須。チェインして書く習慣をつけると忘れにくい。

関連記事