Android 中的 Toast 是一種輕量級、自動消失的提示組件。其名稱靈感來自烤麵包機烤好彈出麵包的場景。本文追溯名稱由來並總結使用要點。
Toast (烤麵包):烤麵包機工作結束,麵包「彈」出來通知用戶。
Android 團隊借用此隱喻:Toast彈出、短暫停留、自動消失,不打斷用戶主流程,正如烤好的麵包等待取用。
LENGTH_SHORT (≈2s) / LENGTH_LONG (≈3.5s)。
// 靜態工廠方法
Toast.makeText(context, "操作成功", Toast.LENGTH_SHORT).show();
// 自定義佈局
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast, null);
TextView tv = layout.findViewById(R.id.message);
tv.setText("自定義樣式");
Toast toast = new Toast(context);
toast.setView(layout);
toast.setDuration(Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
| 問題 | 原因 | 解決 |
|---|---|---|
| 連續調用 show() 只有最後一個生效 | Toast 內部用單例 Timer,新 show() 會 cancel() 舊的 | 用 Handler 延遲發送,或自定義 Toast 管理器 |
| 子線程調用崩潰 | 需在主線程 Looper 環境 | runOnUiThread 或 Handler(Looper.getMainLooper()) |
| Android 7.0+ 權限導致 BadTokenException | 系統限制非 Activity 窗口 | 使用 TYPE_APPLICATION_OVERLAY 或 Snackbar |
Toasty、Crouton、TastyToast 提供豐富樣式。理解 Toast 的設計初衷——「像烤好的麵包一樣彈出、等待、消失」,有助於在正確場景下選擇合適的提示方式。