2013-01-24 52 views
19

Đây là cách tôi phải hiển thị Toast trong 500 mili giây. Mặc dù, nó hiển thị hơn một giây.Làm cách nào để hiển thị bánh mì nướng trong một khoảng thời gian cụ thể?

Toast.makeText(LiveChat.this, "Typing", 500).show(); 

Tôi làm cách nào để hiển thị Toast chỉ trong 500 mili giây?

+0

đọc doc. tham số cuối cùng chỉ có thể lấy các giá trị được xác định trước, nó không phải tính bằng milis. – njzk2

+0

[Bạn có thể hiển thị bánh mì nướng miễn là cần thiết] (http://stackoverflow.com/a/20373743/726863) –

+0

Bản sao có thể có của [Bánh nướng Android có thể dài hơn "Bánh mì nướng.LENGTH \ _LONG"?] (Http : //stackoverflow.com/questions/2220560/can-an-android-toast-be-longer-than-toast-length-long) –

Trả lời

63

này không thể được thực hiện. Để hiển thị bánh mì nướng có chiều dài ngắn hơn Toast.LENGTH_SHORT, bạn phải hủy nó sau thời gian bạn muốn. Một cái gì đó như:

final Toast toast = Toast.makeText(getApplicationContext(), "This message will disappear in half a second", Toast.LENGTH_SHORT); 
    toast.show(); 

    Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       toast.cancel(); 
      } 
    }, 500); 
+0

Cảm ơn lời khuyên của bạn. Tôi làm việc tốt. Cảm ơn rất nhiều. – MuraliGanesan

+0

@Muraliganesan Vui lòng chấp nhận câu trả lời nếu nó giải quyết được sự cố của bạn –

+0

[Điều này có thể được thực hiện chắc chắn!] (Http://stackoverflow.com/a/20373743/726863) –

0

Tôi không tin điều này có thể được thực hiện, bạn chỉ có thể sử dụng Toast.LENGTH_LONG hoặc Toast.LENTH_SHORT bạn không thể xác định tốc độ biết của mình.

-3
Toast.makeText(LiveChar.this,"Typing",Toast.LENGTH_SHORT); 

Đây là cách duy nhất bạn có thể ..

1

Không thể làm những gì bạn đang yêu cầu với bánh mì nướng tiêu chuẩn. Có lẽ bạn nên suy nghĩ về việc tích hợp thư viện của bên thứ ba cung cấp cho bạn các tùy chọn Bánh mì nướng tốt hơn (có tên là Crouton). Tôi đã không sử dụng nó bản thân mình, nhưng mọi người dường như thích nó.

Bạn không thể kiểm soát thời lượng Toasts trong hệ điều hành chuẩn.

Liên kết Crouton: https://github.com/keyboardsurfer/Crouton

1

Điều này không thể thực hiện được. Giá trị của Toast.LENGTH_SHORTToast.LENGTH_LONG là 0 và 1. Điều này có nghĩa là chúng được coi là cờ chứ không phải thời lượng thực tế vì vậy tôi không nghĩ rằng có thể đặt thời lượng thành bất kỳ giá trị nào khác ngoài các giá trị này.

0

Hãy dùng thử trước. Điều này đặt bánh mì nướng thành một khoảng thời gian cụ thể theo mili giây:

public void toast(int millisec, String msg) { 
    Handler handler = null; 
    final Toast[] toasts = new Toast[1]; 
    for(int i = 0; i < millisec; i+=2000) { 
     toasts[0] = Toast.makeText(this, msg, Toast.LENGTH_SHORT); 
     toasts[0].show(); 
     if(handler == null) { 
      handler = new Handler(); 
      handler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        toasts[0].cancel(); 
       } 
      }, millisec); 
     } 
    } 
} 
+0

thêm '2000' vào' i' sẽ không đảm bảo rằng thời gian đã qua .. bạn cần phải sử dụng đồng hồ thay vì –

+0

bạn không thể đếm rằng việc thêm '2000' vào' i' sẽ thêm '2 giây', nó phụ thuộc vào tốc độ thiết bị. Nếu bạn muốn lặp lại cho đến khi bạn cần làm một cái gì đó như 'while ((System.currentTimeMillis() - startTime) <2000))'. Đó là cơ bản trong mọi ngôn ngữ lập trình .. không bao giờ khác với thời gian dựa trên khoảng thời gian lặp. –

2

Tôi tìm thấy this answer. Mặc dù phức tạp hơn một chút nhưng nó cũng cho phép bạn tạo bánh mì nướng dài hơn Toast.LENGTH_LONG. Bạn có thể phải thay đổi thời gian đánh dấu từ 1000ms đến 500ms.

private Toast mToastToShow; 
public void showToast(View view) { 
    // Set the toast and duration 
    int toastDurationInMilliSeconds = 10000; 
    mToastToShow = Toast.makeText(this, "Hello world, I am a toast.", Toast.LENGTH_LONG); 

    // Set the countdown to display the toast 
    CountDownTimer toastCountDown; 
    toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, 1000 /*Tick duration*/) { 
     public void onTick(long millisUntilFinished) { 
     mToastToShow.show(); 
     } 
     public void onFinish() { 
     mToastToShow.cancel(); 
     } 
    }; 

    // Show the toast and starts the countdown 
    mToastToShow.show(); 
    toastCountDown.start(); 
} 

Dưới đây là cách hoạt động: đếm ngược có một thời gian thông báo ngắn hơn so với thời gian mà bánh mì nướng được hiển thị theo cờ, vì vậy bánh mì nướng có thể được hiển thị một lần nữa nếu đếm ngược là chưa kết thúc. Nếu bánh mì nướng được hiển thị một lần nữa trong khi nó vẫn còn trên màn hình, nó sẽ ở lại đó cho toàn bộ thời gian mà không nhấp nháy. Khi đếm ngược kết thúc, bánh mì nướng sẽ bị hủy để ẩn nó ngay cả khi thời lượng hiển thị của nó không kết thúc.

Điều này hoạt động ngay cả khi bánh mì nướng phải được hiển thị trong thời gian ngắn hơn thời lượng mặc định: bánh mì nướng đầu tiên được hiển thị đơn giản sẽ bị hủy khi đếm ngược kết thúc.

1

Cái này hoạt động tốt cho tôi.

final Toast mToastToShow; 
      int toastDurationInMilliSeconds = 10000; 
      mToastToShow = Toast.makeText(getApplicationContext(), "Snapshot Saved Successfully.",Toast.LENGTH_LONG); 


      // Set the countdown to display the toast 
      CountDownTimer toastCountDown; 
      toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, 1000 /*Tick duration*/) { 
       public void onTick(long millisUntilFinished) { 
        mToastToShow.show(); 
       } 
       public void onFinish() { 
        mToastToShow.cancel(); 
       } 
      }; 

      // Show the toast and starts the countdown 
      mToastToShow.show(); 
      toastCountDown.start(); 

đếm ngược được sử dụng để hiển thị thông báo bánh mì nướng trong một khoảng thời gian cụ thể.

3

Thêm vào @ câu trả lời Senth, nếu bạn không wont tích lũy thời gian khi bạn gọi phương thức showToast nhiều lần, với cùng một thông điệp:

private Toast mToastToShow = null; 
String messageBeingDisplayed = ""; 

/** 
* Show Toast message for a specific duration, does not show again if the message is same 
* 
* @param message  The Message to display in toast 
* @param timeInMSecs Time in ms to show the toast 
*/ 
public void showToast(String message, int timeInMSecs) { 
    if (mToastToShow != null && message == messageBeingDisplayed) { 
     Log.d("DEBUG", "Not Showing another Toast, Already Displaying"); 
     return; 
    } else { 
     Log.d("DEBUG", "Displaying Toast"); 
    } 
    messageBeingDisplayed = message; 
    // Set the toast and duration 
    int toastDurationInMilliSeconds = timeInMSecs; 
    mToastToShow = Toast.makeText(this, message, Toast.LENGTH_LONG); 

    // Set the countdown to display the toast 
    CountDownTimer toastCountDown; 
    toastCountDown = new CountDownTimer(toastDurationInMilliSeconds, timeInMSecs /*Tick duration*/) { 
     public void onTick(long millisUntilFinished) { 
      if (mToastToShow != null) { 
       mToastToShow.show(); 
      } 
     } 

     public void onFinish() { 
      if (mToastToShow != null) { 
       mToastToShow.cancel(); 
      } 
      // Making the Toast null again 
      mToastToShow = null; 
      // Emptying the message to compare if its the same message being displayed or not 
      messageBeingDisplayed = ""; 
     } 
    }; 

    // Show the toast and starts the countdown 
    mToastToShow.show(); 
    toastCountDown.start(); 
} 

Bạn có thể hiển thị bánh mì nướng bây giờ cho 500 ms như này:

showToast("Not Allowed", 500); 
0

tôi đã thử phương pháp khác nhau và phương pháp này làm việc cho tôi

final Toast mytoast = Toast.makeText(getApplicationContext(), jsonObject.getString("response_message"), Toast.LENGTH_SHORT); 
mytoast.show(); 

         Handler handler = new Handler(); 
         handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
           mytoast.cancel(); 
          } 
         }, 5000);// 5 sec 
Các vấn đề liên quan