Java在短时间内显示一个消息框,并使其自身消失



在阅读了AlertDialog上的许多解决方案后,我终于设法显示了一条消息。该消息是小游戏中巡回演出的柜台。在玩家进入下一轮之前,该消息应弹出。它应该保留几秒钟,然后独自消失。

发生了什么:该程序被困在显示警报窗口中,而不会转到I 行。知道如何在不引入用户必须击中的按钮的情况下解决此问题?我已经取出了解雇(),因为无论如何还是ScreenRefresh。但是目前,它仍然没有达到这一点。我正在与Android Studio合作2.2.2

如果有人可以研究它,那将是很棒的。预先感谢。

这是代码:

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.os.Handler;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.Date;
import java.util.Random;
private void startRound() {
    int i=0;
    round = round +1;
    AlertDialog alertDialog = new AlertDialog.Builder(this).create();
    alertDialog.setTitle(" ");
    alertDialog.setMessage("Round " + round);
    while(i<100) {
        alertDialog.show();
        i++;
    }
//            alertDialog.dismiss();

        screenrefresh();
        handler();

您应该显示对话框并使用处理程序解散:

final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
  @Override
  public void run() {
    alertDialog.dismiss();
  }
}, 100);

如果您刷新活动,则可以使用吐司。

您可以自定义吐司样式。

我选择了Ghorbanzadeh的提示来使用吐司。现在看起来像这样:

private void startRound() {
    round = round +1;
    if( round != 1 ) {
        CharSequence text = ("Starte Runde " + round);
        int duration = Toast.LENGTH_SHORT;
        Toast toast = Toast.makeText(this, text, duration);
        toast.setGravity(Gravity.CENTER_HORIZONTAL |Gravity.CENTER_VERTICAL, 0, 0);
        toast.show();
    }
}

杂物集中在屏幕上,持续时间足够长以至于可以看到。这是我一直在寻找的简短而简单的代码。再次感谢您的快速帮助。

i 没有增加,因为您的警报对话框需要首先关闭。所以它被卡住了。

下面的代码显示对话框并在5秒钟后关闭,用户无法将其解散。

final AlertDialog alertDialog = new AlertDialog.Builder(this).create();
        alertDialog.setTitle(" ");
        alertDialog.setMessage("Round " + round);
        alertDialog.setCancelable(false);  // if you want it not to be dismissed by user
        alertDialog.show();
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(500);  // seconds * 100
                } catch (InterruptedException e) {
                    if (alertDialog.isShowing())
                    {
                        alertDialog.dismiss();
                    }
                    e.printStackTrace();
                }finally {
                    if (alertDialog.isShowing())
                    {
                        alertDialog.dismiss();
                    }
                }
            }
        }).run();

对于您的任务snackbars将更加可接受。

在layout.xml中添加coordinatorlayout

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"       
    android:layout_height="match_parent"       
    android:layout_alignParentBottom="true"       
    android:layout_centerHorizontal="true"       
    android:id="@+id/snackbarPosition"/>

刚运行Snackbar:

final View.OnClickListener clickListener = new View.OnClickListener() {
    public void onClick(View v) {
       ...
    }
};
final View coordinatorLayoutView = findViewById(R.id.snackbarPosition);
Snackbar
    .make(coordinatorLayoutView, R.string.snackbar_text, Snackbar.LENGTH_LONG)
    .setAction(R.string.snackbar_action_undo, clickListener)
    .show();

您还可以信任

还有一个选项

在向对话框显示向用户

显示时,请尝试实现AlarmManger

用于AlarmManger实施

请使用

PendingIntent.getBroadcast(mContext,
                12345, intent, PendingIntent.FLAG_ONE_SHOT);

和u也可以取消警报管理器

最新更新