站長留言

  • ✅ 本站維護及更新歷史紀錄,詳情請參考公告
  • ✅ 有任何意見、想法,歡迎留言給Spicy知道喔
  • ✅ 固定於每周一至周五更新Blogger文章,周末不定期
程式Android 安卓

【APP/Android】如何解決 Toast 因重複點擊,造成的無限累加時間的彈出訊息

Common 前言

  1. 左右圖,一樣都點擊5次

  2. 彈出訊息視窗,每一次閃爍表示訊息結束

  3. 左圖是每次點擊都會增加 Toast 顯示的時間 = 2*5 = 10秒

    • 每次閃爍時間等長 (2秒)
  4. 右圖是只計算最後一次點擊的 Toast 顯示時間 = 2*1 = 2秒

    • 每點擊一次,都會閃爍一次
  5. 為了解決左圖,出現的無限累加時間 BUG


    無限累加時間 只有1次時間

Toast 常用整理

Constants 常數

常數 時間
LENGTH_LONG 3.5秒
LENGTH_SHORT 2秒

Constructors 建構子

Toast(Context context)

Methods 方法

  • Common 共用

    • setDuration(int duration)
    • setGravity(int gravity, int xOffset, int yOffset):設定訊息顯示位置
      • Gravity.CENTER
      • Gravity.CENTER_VERTICAL
      • Gravity.FILL_HORIZONTAL
      • Gravity.FILL_VERTICAL
      • 後兩個參數 xOffset,yOffset 通常為 0
    • show():顯示訊息
    • cancel():關閉訊息
  • Text 訊息是文字

    • makeText(Context context, int resId, int duration)
    • makeText(Context context, CharSequence text, int duration)
    • setText(int resId)
    • setText(CharSequence s)
  • View 訊息是畫面,例如:圖片

    • setView(View view)

Tutorial 教學

Explanation 解說

  • 將 Toast 的變數設為 global variable 全域變數
  • toast == null 創造新的 Toast
  • 但當 toast != null 不創造新的 Toast,只設定或變更訊息內容

Exmaple 範例

  • Text 訊息是文字
private Toast toast; @Override protected void onCreate(Bundle savedInstanceState){ ... //省略程式碼 // 避免 toast 累加時間 if (toast == null) { toast = new Toast(this); } toast.setText(message) toast.setGravity(Gravity.CENTER,0,0); toast.setDuration(Toast.LENGTH_SHORT); toast.show(); }
  • View 訊息是畫面,例如:圖片
private Toast toast; ... //省略程式碼 @Override public void onClick(final View v) { // 避免 toast 累加時間 if (toast == null) { toast = new Toast(v.getContext()); } toast.setView(imageView); // 使圖片width充滿畫面 toast.setGravity(Gravity.FILL_HORIZONTAL | Gravity.FILL_VERTICAL, 0, 0); toast.setDuration(Toast.LENGTH_SHORT); toast.show(); }

Reference 參考資料

  1. 圖示;
    https://stackoverflow.com/questions/36920175/make-android-toast-not-cancellable
  2. Toast 官方文件:https://developer.android.com/reference/android/widget/Toast

沒有留言:

張貼留言

本網站建議使用電腦或平板瀏覽