自定义Toast不适用于ICS

时间:2012-12-11 19:02:16

标签: android android-layout

我在模块中有一系列Toast条消息,每次用户按下按钮时都会显示Toast。为了减少排队时间,我只是将值传递给方法,这样它就不会结束直到完成预定的持续时间。

像这样:

dt("on button press");


private void dt(final String message) {

    TextView text = (TextView) layout.findViewById(R.id.totext);

    toast = new Toast(getApplicationContext());

    toast.setGravity(Gravity.BOTTOM, 0, 0);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(layout);
    toast.cancel();
    text.setText(message);
    text.setTextSize(16);

    toast.show();

}

我的问题是这段代码在Gingerbread和Android的较低版本上完美运行。 但它不适用于ICS和Jelly Bean吗?

有什么问题?

1 个答案:

答案 0 :(得分:4)

问题出在你正在调用的Toast.cancel()上。我相信,在Honeycomb之前,只有cancel() 隐藏它,如果它已经显示的话。但是,在以后的实现中,它具有以下行为(重点是我的):

  

关闭视图,如果它显示,或如果它还没有显示则显示

您需要将cancel()的电话转移到new Toast()之前(当然,首先检查它是null):

private void dt(final String message) {

    TextView text = (TextView) layout.findViewById(R.id.totext);

    if (toast != null) {
        toast.cancel(); // Move me here!
    }
    toast = new Toast(getApplicationContext());

    toast.setGravity(Gravity.BOTTOM, 0, 0);
    toast.setDuration(Toast.LENGTH_SHORT);
    toast.setView(layout);
    text.setText(message);
    text.setTextSize(16);

    toast.show();

}