显示倒计时的Dialog

这里直接用系统Dialog中添加了倒计时的显示,如果用自定义Dialog会更美观;

 private TextView mOffTextView;
 private Handler mOffHandler;
 private Timer mOffTime;
 private Dialog mDialog;



//创建对话框

void initDialog(){
  
   mOffTextView = new TextView(this);
  
   mDialog = new AlertDialog.Builder(this)
    .setTitle("提示")
         .setCancelable(false)
         .setView(mOffTextView) 
         
         .setPositiveButton("确定", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface dialog, int id) {
           mOffTime.cancel();
           off();关闭后的一些操作         
          }
         })
         .setNegativeButton("取消", new DialogInterface.OnClickListener() {
             public void onClick(DialogInterface dialog, int id) {
              dialog.cancel();
              mOffTime.cancel();
             }
         })
         .create();
   mDialog.show();
   mDialog.setCanceledOnTouchOutside(false);

    mOffHandler = new Handler() {
     public void handleMessage(Message msg) {

      if (msg.what > 0) {

        动态显示倒计时
       mOffTextView.setText("    即将关闭:"+msg.what);

      } else {
      倒计时结束自动关闭

       if(mDialog!=null){
        mDialog.dismiss();
       }
       off();关闭后的操作

       mOffTime.cancel();
      }
      super.handleMessage(msg);
     }

    };

          //倒计时

         mOffTime = new Timer(true);
      TimerTask tt = new TimerTask() {
       int countTime = 10;
       public void run() {
        if (countTime > 0) {
         countTime--;
        }
        Message msg = new Message();
        msg.what = countTime;
        mOffHandler.sendMessage(msg);
       }
      };
      mOffTime.schedule(tt, 1000, 1000);
     }


 

效果图

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的带倒计时的 loading dialog 的示例代码,你可以参考一下: ```java public class LoadingDialog extends Dialog { private TextView tvMessage; private ProgressBar progressBar; private CountDownTimer countDownTimer; private OnTimeOutListener onTimeOutListener; private static final long DEFAULT_TIMEOUT = 5000; // 默认超时时间为5秒 public LoadingDialog(Context context) { super(context); init(); } public LoadingDialog(Context context, int themeResId) { super(context, themeResId); init(); } protected LoadingDialog(Context context, boolean cancelable, OnCancelListener cancelListener) { super(context, cancelable, cancelListener); init(); } private void init() { setContentView(R.layout.dialog_loading); tvMessage = findViewById(R.id.tv_message); progressBar = findViewById(R.id.progress_bar); setCancelable(false); } /** * 设置消息文本 * * @param message 消息文本 */ public void setMessage(String message) { tvMessage.setText(message); } /** * 设置超时时间 * * @param timeout 超时时间,单位毫秒 */ public void setTimeout(long timeout) { if (countDownTimer != null) { countDownTimer.cancel(); } countDownTimer = new CountDownTimer(timeout, 1000) { @Override public void onTick(long millisUntilFinished) { // 显示剩余时间 tvMessage.setText("距离超时还有 " + millisUntilFinished / 1000 + " 秒"); } @Override public void onFinish() { // 超时回调 if (onTimeOutListener != null) { onTimeOutListener.onTimeOut(); } dismiss(); } }; countDownTimer.start(); } /** * 设置超时监听器 * * @param listener 超时监听器 */ public void setOnTimeOutListener(OnTimeOutListener listener) { onTimeOutListener = listener; } public interface OnTimeOutListener { void onTimeOut(); } } ``` layout/dialog_loading.xml 文件内容如下: ```xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center"> <ProgressBar android:id="@+id/progress_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:indeterminate="true" /> <TextView android:id="@+id/tv_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@id/progress_bar" android:layout_centerHorizontal="true" android:layout_marginTop="16dp" android:textColor="@android:color/black" android:textSize="14sp" /> </RelativeLayout> ``` 使用时,可以像这样: ```java LoadingDialog dialog = new LoadingDialog(this); dialog.setMessage("正在加载,请稍后..."); dialog.show(); dialog.setTimeout(10000); // 设置超时时间为10秒 dialog.setOnTimeOutListener(new LoadingDialog.OnTimeOutListener() { @Override public void onTimeOut() { // 处理超时事件 Toast.makeText(MainActivity.this, "加载超时", Toast.LENGTH_SHORT).show(); } }); ``` 当超时时间到达时,会自动触发 onTimeOut() 方法,可以在该方法中处理超时事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值