使android吐司不可取消

时间:2016-04-28 16:15:27

标签: android toast

我正在我的应用中祝酒。问题是在某些设备(三星galaxy s6)中,触摸屏幕时取消了Toast。这个问题在其他设备(Nexus 5)中没有发生

这是我的代码

LayoutInflater li = getLayoutInflater();
View layout = li.inflate(R.layout.popup_tutorial_privado, (ViewGroup)findViewById(R.id.popup));
toast = new Toast(getApplicationContext());
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

3 个答案:

答案 0 :(得分:1)

退后一步

如果您需要更多控制权并使用ToastDialog时间之后解散自己,请完全避免使用n 。你可以编写一个像这个一样简单的方法,它可以产生与Toast功能相同的东西,但可以更自由地控制何时以及如何解除它。

public void customToast(String message, int duration){
    final Dialog dialog = new Dialog(MainActivity.this);
    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setContentView(R.layout.custom_toast);
    dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
    dialog.setCancelable(false);

    //Customize the views, add actions, whatever
    ((TextView)dialog.findViewById(R.id.message)).setText(message);
    dialog.show();
    //Auto cancel the dialog after `duration`
    new Handler().postDelayed(new Runnable(){
        @Override
        public void run() {
            dialog.cancel();
        }
    },duration);
}

演示

enter image description here

注意

如果您希望对话显示长吐司持续的确切时间,请使用3500以后private static final int LONG_DELAY = 3500;

但是等等!对话框成为焦点,我需要保留它!

好吧,好吧,你可能在EditText内写作而Dialog表现得像Toast一样控制你的焦点,键盘隐藏起来,一切都丢失了。为了防止这种情况,只需设置一个额外的标记,告诉Dialog它不可调焦,并且它不应该尝试请求它。

dialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);

请注意,如果您通过观看Toast中的文字更改来显示EditText,则应该保留某种旗帜,以了解它是否会被显示,或者已经显示,或者其他什么,否则你最终会得到多个对话框。

答案 1 :(得分:0)

Toast在小弹出窗口中提供有关操作的简单反馈。它仅填充消息所需的空间量,并且当前活动保持可见和交互。 吐司不与用户互动,就像“来来往往”你不能将其设置为可取消的真假。 你应该使用Dialogs来实现你想要的目标。

答案 2 :(得分:0)

正如文件所示:

  

Toast在小弹出窗口中提供有关操作的简单反馈。它仅填充消息所需的空间量,并且当前活动保持可见和交互。例如,在发送电子邮件之前导航离开电子邮件会触发"草稿保存" toast,告诉您以后可以继续编辑。超时后,Toasts会自动消失。

对于你解释的行为,你确实使用了无限时间的零食吧 Snackbar documentation