ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
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 引数 | Context | Activity / Application などのコンテキスト |
| 第 2 引数 | CharSequence または int (リソース ID) | 表示するメッセージ |
| 第 3 引数 | int | 表示時間 (LENGTH_SHORT / LENGTH_LONG) |
表示時間
| 定数 | 実際の時間 | 用途 |
|---|---|---|
Toast.LENGTH_SHORT | 約 2 秒 | 軽いフィードバック |
Toast.LENGTH_LONG | 約 3.5 秒 | 少し長めの情報 |
任意の秒数は指定できません。長く表示したいときは Snackbar や Dialog を検討。
文字列リソースで国際化
<!-- res/values/strings.xml -->
<resources>
<string name="msg_saved">保存しました</string>
<string name="msg_error">エラーが発生しました</string>
</resources>// リソース 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 (旧スタイル)
<!-- res/layout/custom_toast.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:background="#222"
android:padding="12dp">
<ImageView android:src="@drawable/ic_check"
android:layout_width="24dp" android:layout_height="24dp"/>
<TextView android:id="@+id/msg"
android:textColor="#FFF"
android:layout_marginStart="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>val view = layoutInflater.inflate(R.layout.custom_toast, null)
view.findViewById<TextView>(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() 必須。チェインして書く習慣をつけると忘れにくい。
関連記事
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
同階層のページはありません
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?