当为Toast使用setDuration()时,是否可以设置一个自定义长度或至少比Toast. length_long更长的长度?


当前回答

简单地使用SuperToast在任何情况下都可以做出优雅的吐司。让你的吐司颜色鲜艳。编辑你的字体颜色和大小。希望这对你来说都是一体的。

其他回答

如果你深入挖掘android代码,你会发现这些行清楚地表明,我们不能改变Toast消息的持续时间。

 NotificationManagerService.scheduleTimeoutLocked() {
    ...
    long delay = immediate ? 0 : (r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY);
    }

持续时间的默认值为

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds

正如其他人提到的,Android toast可以是LENGTH_LONG或LENGTH_SHORT。这是没有办法的,你也不应该遵循发布的任何“技巧”。

toast的目的是显示“非必要的”信息,由于它们的持久影响,如果消息的持续时间超过一定的阈值,消息可能会脱离上下文。如果股票吐司被修改,使它们可以显示比LENGTH_LONG更长的时间,消息将在屏幕上停留,直到应用程序的进程终止,因为吐司视图被添加到WindowManager,而不是应用程序中的ViewGroup。我认为这就是硬编码的原因。

如果您确实需要显示toast样式的消息超过3.5秒,我建议构建一个附加到Activity内容的视图,这样当用户退出应用程序时,它就会消失。我的SuperToasts库处理这个问题和许多其他问题,请随意使用它!您很可能对使用SuperActivityToasts感兴趣

Toast.makeText(this, "Text", Toast.LENGTH_LONG).show(); 
Toast.makeText(this, "Text", Toast.LENGTH_LONG).show();

这个问题的解决方法很简单。两到三倍就能让吐司保鲜得更久。这是唯一的办法。

如果你想要一个Toast持续存在,我发现你可以通过让一个Timer反复调用Toast .show()来解决它(每秒钟左右应该这样做)。如果Toast已经显示,调用show()不会中断任何内容,但是它会刷新Toast在屏幕上停留的时间。

一个自定义背景和视图的祝酒词对我来说很管用。我在nexus 7平板电脑上测试了它,我注意到在循环过程中没有淡入淡出动画。实现如下:

public static void customToast(Context context, String message, int duration) {

    for (int i = 0; i < duration; i++) {
        Toast toast = new Toast(context);
        toast.setDuration(Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER, 0, 0);
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View view = inflater.inflate(R.layout.toast_layout, null);
        TextView textViewToast = (TextView) view
                .findViewById(R.id.textViewToast);
        textViewToast.setText(message);
        toast.setView(view);
        toast.show();
    }

}

下面是上面代码中使用的自定义textview:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textViewToast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/fragment_background"
android:padding="8dp"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/blue" />

@drawable/fragment_background正在使我的吐司有圆角,就像kitkat版本一样。您还可以在该文件中添加其他视图。任何改进和评论的修改都是鼓励的,因为我计划在我的live应用程序中实现这一点。