0

我是 android 新手,我想在 a 中看到我的消息,Toast但它会显示一段时间。

例如,我想将消息显示到一小时或更长时间。

4

7 回答 7

1

不,你不能。使用自定义对话框并在需要时将其关闭。但我想知道你为什么要在这么长时间内显示某种弹出窗口。

我建议重新考虑您的设计。

您可能还想检查面包块

https://github.com/keyboardsurfer/Crouton

于 2014-04-02T06:07:10.707 回答
0

好吧,就像这里所说的,没有正确的方法可以做到这一点。

但是,它有一种技巧——只需在 a 中运行你的 Toast for-loop,迭代的数量将控制长度。例如 - 运行循环两次(如下所示)将使时间加倍。运行 3 次将使长度增加三倍。同样,这只是一种可行的解决方法:-)

for (int i=0; i < 2; i++)
{
      Toast.makeText(this, "test", Toast.LENGTH_LONG).show();
}

您必须考虑到它确实存在缺陷 - 如果用户在循环结束之前退出应用程序,它将继续显示,并且在某些设备上,Toast 可能会在每次迭代之间闪烁。所以,由你决定!

于 2014-04-02T06:23:14.560 回答
0

Toast 的目的是一次显示一条简单的消息。你不能长时间展示它。您可以使用对话框为 Toast 消息自定义您自己的 UI。

public static void showCustomToast(final Activity mActivity,final String helpText,final int sec) {
  if(mActivity != null){
 mActivity.runOnUiThread(new Runnable() {
 @Override
    public void run() {
        int mSec = 3000;
        if(sec != 0){
           mSec = sec;
  }
  LayoutInflater inflater = mActivity.getLayoutInflater();
  View messageDialog = inflater.inflate(R.layout.overlay_message, null);
  layer = new CustomLayout(mActivity);
  LayoutParams params = new                                                LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
  messageDialog.setLayoutParams(params);
  TextView message = (TextView) messageDialog.findViewById(R.id.messageView);
  Button okBtn = (Button) messageDialog.findViewById(R.id.messageOkbtn);
  if(okBtn != null){
   okBtn.setVisibility(View.GONE);
  }
  message.setText(helpText);
  final Dialog dialog = new Dialog(mActivity,R.style.ThemeDialogCustom);
  dialog.setContentView(messageDialog);
  dialog.show();
   final Timer t = new Timer();
  t.schedule(new TimerTask() {
     @Override
   public void run() {
   if(dialog.isShowing()){
    dialog.dismiss();
   }
   t.cancel();
   }
   },mSec);
   }
   });
  }
 }

供参考

于 2014-04-02T06:37:42.020 回答
0

尝试使用对话框而不是 toast

SingleButtton.setOnClickListener(new View.OnClickListener() {

    public void onClick(View arg0) {
        // Creating alert Dialog with one Button

        AlertDialog alertDialog = new AlertDialog.Builder(AlertDialogActivity.this).create();

        // Setting Dialog Title
        alertDialog.setTitle("Alert Dialog");

        // Setting Dialog Message
        alertDialog.setMessage("Welcome to Android Application");

        // Setting Icon to Dialog
        alertDialog.setIcon(R.drawable.tick);

        // Setting OK Button
        alertDialog.setButton("OK", new DialogInterface.OnClickListener() {

                    public void onClick(DialogInterface dialog,int which) 
                    {
                        // Write your code here to execute after dialog closed

                    }
                });

        // Showing Alert Message
        alertDialog.show();

    }
});
于 2014-04-02T06:07:26.970 回答
0

的值LENGTH_SHORT and LENGTH_LONG0 and 1.they 被视为标志,因此我认为无法设置除此之外的时间。

于 2014-04-02T06:08:41.967 回答
0

你可以试试这个:

编辑:

int time  = 1000*60 // 1 hour
for (int i=0; i < time; i++)
{
  Toast.makeText(this, "Your msg", Toast.LENGTH_LONG).show();
 }
于 2014-04-02T06:09:40.673 回答
0

将 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);
        }
    }
}
于 2015-08-26T21:58:11.953 回答