//40 seconds
long mToastLength = 40*1000
//this toast will be displayed for 40 seconds.
Toast.makeText(this, "Hello!!!!!", mToastLength).show();
0
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();
}
import android.content.Context;
import android.os.CountDownTimer;
import android.widget.Toast;
public class CustomToast extends Toast {
int mDuration;
boolean mShowing = false;
public CustomToast(Context context) {
super(context);
mDuration = 2;
}
/**
* Set the time to show the toast for (in seconds)
* @param seconds Seconds to display the toast
*/
@Override
public void setDuration(int seconds) {
super.setDuration(LENGTH_SHORT);
if(seconds < 2) seconds = 2; //Minimum
mDuration = seconds;
}
/**
* Show the toast for the given time
*/
@Override
public void show() {
super.show();
if(mShowing) return;
mShowing = true;
final Toast thisToast = this;
new CountDownTimer((mDuration-2)*1000, 1000)
{
public void onTick(long millisUntilFinished) {thisToast.show();}
public void onFinish() {thisToast.show(); mShowing = false;}
}.start();
}
}
5
将toast设置为特定时间段(以毫秒为单位):
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);
}
}
}
2
此文本将在5秒后消失 .
final Toast toast = Toast.makeText(getApplicationContext(), "My Text", Toast.LENGTH_SHORT);
toast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.cancel();
}
}, 5000); // Change to what you want
编辑:正如Itai Spector在评论中说它将显示约3.5秒,所以使用此代码:
int toastDuration = 5000; // in MilliSeconds
Toast mToast = Toast.makeText(this, "My text", Toast.LENGTH_LONG);
CountDownTimer countDownTimer;
countDownTimer = new CountDownTimer(toastDuration, 1000) {
public void onTick(long millisUntilFinished) {
mToast.show();
}
public void onFinish() {
mToast.cancel();
}
};
mToast.show();
countDownTimer.start();
8
我知道我有点晚了,但是我把Regis_AG的答案包好了,并将它包装在一个帮助类中,效果很好 .
public class Toaster {
private static final int SHORT_TOAST_DURATION = 2000;
private Toaster() {}
public static void makeLongToast(String text, long durationInMillis) {
final Toast t = Toast.makeText(App.context(), text, Toast.LENGTH_SHORT);
t.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
new CountDownTimer(Math.max(durationInMillis - SHORT_TOAST_DURATION, 1000), 1000) {
@Override
public void onFinish() {
t.show();
}
@Override
public void onTick(long millisUntilFinished) {
t.show();
}
}.start();
}
}
在您的应用程序代码中,只需执行以下操作:
Toaster.makeLongToast("Toasty!", 8000);
2
创建稍长的消息的一种非常简单的方法如下:
private Toast myToast;
public MyView(Context context) {
myToast = Toast.makeText(getContext(), "", Toast.LENGTH_LONG);
}
private Runnable extendStatusMessageLengthRunnable = new Runnable() {
@Override
public void run() {
//Show the toast for another interval.
myToast.show();
}
};
public void displayMyToast(final String statusMessage, boolean extraLongDuration) {
removeCallbacks(extendStatusMessageLengthRunnable);
myToast.setText(statusMessage);
myToast.show();
if(extraLongDuration) {
postDelayed(extendStatusMessageLengthRunnable, 3000L);
}
}
final Toast tag = Toast.makeText(getBaseContext(), "YOUR MESSAGE",Toast.LENGTH_SHORT);
tag.show();
new CountDownTimer(9000, 1000)
{
public void onTick(long millisUntilFinished) {tag.show();}
public void onFinish() {tag.show();}
}.start();
这里吐司显示大约10秒 .
希望这可以帮助 .
126
安排倒计时,直到将来的某个时间,并在整个过程中定期通知 . 在文本字段中显示30秒倒计时的示例:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
String message = "This is your message";
new AlertDialog.Builder(YourActivityName.this)
.setTitle("Optional Title (you can omit this)")
.setMessage(message)
.setPositiveButton("ok", null)
.show();
28 回答
您可以在
Toast.makeText();
方法中设置所需的时间(以毫秒为单位),如下所示:一个非常简单的问题解决方案 . 它们中的两倍或三倍将使Toast持续更长时间 . 这是唯一的方法 .
您可能想尝试:
加倍时间 . 如果指定3而不是2,它将使时间增加三倍 . 等等 .
LONG_DELAY 3.5 sec 的吐司显示和 2 sec 的 SHORT_DELAY 吐司显示 .
Toast在内部使用INotificationManager,并在每次调用Toast.show()时调用它的enqueueToast方法 .
使用SHORT_DELAY两次调用show()会再次将相同的Toast排入队列 . 它将显示 4 sec (2秒2秒) .
同样,用LONG_DELAY两次调用show()会再次将相同的toast排入队列 . 它将显示 7 sec (3.5秒3.5秒)
正如其他人所提到的,Android Toasts可以是LENGTH_LONG或LENGTH_SHORT . 没有办法解决这个问题,也不应该遵循发布的任何“黑客” .
Toasts的目的是显示“非必要”信息,并且由于它们的挥之不去的效果,如果消息的持续时间超过某个阈值,则消息可能远远超出上下文 . 如果修改了库存Toasts以便它们显示的时间长于LENGTH_LONG,则消息将在屏幕上停留,直到应用程序的进程终止,因为Toast视图被添加到WindowManager而不是应用程序中的ViewGroup . 我认为这就是硬编码的原因 .
如果您绝对需要显示超过三秒半的Toast样式消息,我建议构建一个附加到Activity内容的视图,这样当用户退出应用程序时它将消失 . 我的SuperToasts库处理这个问题和许多其他人,随时使用它!您很可能对使用SuperActivityToasts感兴趣
如果你想要一个
Toast
持续存在,我发现你可以通过反复调用Timer
来唤醒它(每秒钟左右应该这样做) . 如果Toast
已经显示,则调用show()
不会破坏任何内容,但它会刷新它在屏幕上停留的时间 .这是我使用上面的代码制作的自定义Toast类:
将toast设置为特定时间段(以毫秒为单位):
此文本将在5秒后消失 .
编辑:正如Itai Spector在评论中说它将显示约3.5秒,所以使用此代码:
我知道我有点晚了,但是我把Regis_AG的答案包好了,并将它包装在一个帮助类中,效果很好 .
在您的应用程序代码中,只需执行以下操作:
创建稍长的消息的一种非常简单的方法如下:
请注意,上面的示例消除了LENGTH_SHORT选项以使示例保持简单 .
您通常不希望使用Toast消息以非常长的间隔显示消息,因为这不是Toast类的预期目的 . 但是有些时候你需要显示的文本数量可能会让用户读取时间超过3.5秒,在这种情况下,稍微延长时间(例如,如上所示,为6.5秒)可以,IMO,是有用的并符合预期用途 .
避免按顺序启动的祝酒之间的褪色效果的最佳解决方案:
这里吐司显示大约10秒 .
希望这可以帮助 .
安排倒计时,直到将来的某个时间,并在整个过程中定期通知 . 在文本字段中显示30秒倒计时的示例:
LENGTH_SHORT和LENGTH_LONG的值为0和1.这意味着它们被视为标志而不是实际持续时间,因此我认为不可能将持续时间设置为除这些值之外的任何值 .
如果要向用户显示更长时间的消息,请考虑Status Bar Notification . 状态栏通知可以在不再相关时以编程方式取消 .
使用Crouton,它是一个非常灵活的Toast库 .
Crouton
你可以像吐司一样使用它:
或者你甚至可以更深入地定制它,比如将时间设置为无限!例如,在这里我想显示一个Toast消息,直到用户通过点击它来确认它 .
客户布局将为吐司充气 .
这是一个非常简单的方法,对我有用:
for (int i=0; i < 3; i++) { Toast.makeText(this, "MESSAGE", Toast.LENGTH_SHORT).show(); }
LENGTH_SHORT的持续时间为2秒,LENGTH_LONG为3.5秒,此处将显示 6 Seconds 的toast消息,因为它包含在for循环中 . 但是这种方法的缺点是在每2秒之后可能出现小的褪色效果 . 但它并不明显 . 希望它有所帮助
我开发了一个自定义Toast类,您可以使用它来显示Toast所需的持续时间(毫秒)
我知道答案很晚..我遇到了同样的问题,并决定实施我自己的裸骨版本Toast,在查看android的Toast源代码之后 .
基本上,您需要创建一个新的窗口管理器,并使用处理程序显示和隐藏窗口所需的持续时间
初始化布局后,您可以使用自己的隐藏和显示方法
现在你只需要添加两个可运行的线程来调用handleShow()和handleHide(),你可以将它们发送给Handler .
最后一部分
这是一个快速而肮脏的实现..没有考虑任何性能 .
只需使用SuperToast即可在任何情况下制作优雅的吐司 . 祝你干杯 colourful . 编辑你的 font color 也是 size . 希望它能为你所有 .
如果你深入挖掘android代码,你可以找到明确指出的行,我们不能改变Toast消息的持续时间 .
和期限的默认值是
为什么吃Toast,当你可以拥有整个 Snackbar :https://developer.android.com/reference/android/support/design/widget/Snackbar.html
Snackbar> Toast,Custom Toast,Crouton
可以使用专门运行toast的线程来攻击Toast持续时间 . 这是有效的(运行吐司10秒,根据自己的喜好修改 sleep 和 ctr ):
我编写了一个辅助类来执行此操作 . 你可以在github上看到代码:https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastedActivity.java
这就是你如何显示祝酒5秒(或5000毫秒):
在使用每个可用解决方案失败后,我终于使用递归进行了解决方法 .
Code:
如果你需要一个长吐司,有一个实用的替代方案,但它需要你的用户点击一个确定按钮让它消失 . 您可以像这样使用AlertDialog:
如果你有一条很长的消息,很可能,你不知道你的用户需要多长时间阅读消息,所以有时候要求你的用户点击OK按钮继续 . 就我而言,当用户点击帮助图标时,我会使用此技术 .
自定义背景和视图的吐司为我做了诀窍 . 我在nexus 7平板电脑上进行了测试,在循环过程中没有注意到fadein fadeout动画 . 继承人实施:
下面是上面代码中使用的自定义textview:
@ drawable / fragment_background正在使我的吐司有圆角,如kitkat版本 . 您也可以在文件中添加其他视图 . 我鼓励对改进和评论进行任何修改,因为我计划在我的实时应用中实现这一点 .
用户无法定制Toast的持续时间 . 因为NotificationManagerService的scheduleTimeoutLocked()函数不使用字段持续时间 . 源代码如下 .