使android toast不可取消

使android toast不可取消,android,toast,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(getApplica

我正在我的应用程序中显示祝酒词。问题在于,在某些设备(三星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();

toast在一个小弹出窗口中提供有关操作的简单反馈。它只填充消息所需的空间量,并且当前活动保持可见和交互式。 toast不会与用户交互,就像“来来去去”一样,您不能将其设置为可取消的true或false。 你应该使用它来实现你想要的。

后退一步 如果您需要更多的控制,请避免使用
Toast
,并使用
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);
}
演示

注 如果您想让对话框显示长时间祝酒的确切时间,请使用
3500
,因为
private static final int long\u DELAY=3500

但是等等!对话框需要焦点,我需要保留它! 好吧,好吧,你可能在
编辑文本
中写作,而
对话框
就像一个
吐司
控制着你的焦点,你的键盘隐藏了,一切都丢失了。为了防止这种情况,只需设置一个额外的标志,它将告诉
对话框它不可聚焦,并且它不应该尝试请求它

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

请记住,如果您通过查看
EditText
中的文本变化来显示
Toast
,您应该保留某种标志,以了解它是否正在显示、是否已经显示或其他任何内容,否则您将得到多个对话框。

如文档所示:


toast在一个小弹出窗口中提供有关操作的简单反馈。它只填充消息所需的空间量,并且当前活动保持可见和交互式。例如,在发送电子邮件之前离开电子邮件会触发“草稿已保存”toast,让您知道以后可以继续编辑。烤面包会在超时后自动消失

对于您解释的行为,您确实使用了无限时间的snackbar

但如何避免在某些设备上取消敬酒?您所说的某些设备是什么意思?在三星galaxy s6中。我显示烤面包片,当我触摸屏幕时,烤面包片就会消失。我想你需要使用提醒对话框。查看更新答案。使用带有无限时间参数的快餐店。我有一个问题。我需要在customToast可见时继续在键盘上书写。我该怎么做?