<Android> 模态对话框

public class SynDialog extends Dialog {

        private Handler mHandler;
        protected int result;
        Button btnOK;
        Button btnCancel;
        TextView tvMessage;
		TextView tvPrompt;

        public SynDialog(Context context, boolean showBtn){
            super(context);
            onCreate();
            if (!showBtn) {
                btnCancel.setEnabled(false);
                btnOK.setEnabled(false);
                btnOK.setVisibility(View.INVISIBLE);
                btnCancel.setVisibility(View.INVISIBLE);
            }
        }
        public SynDialog setMessage(String msg) {
            tvMessage.setText(msg);
			return SynDialog.this;
        }

        @Override
        public boolean onKeyDown(int keyCode, @NonNull KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
                btnCancel.performClick();
                return true;
            } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
                btnOK.performClick();
                return true;
            }
            return super.onKeyDown(keyCode, event);
        }

        @Override
        public boolean onTouchEvent(@NonNull MotionEvent event) {
            if (btnCancel.getVisibility() == View.VISIBLE) {
                return false;
            }
            return super.onTouchEvent(event);
        }

        public void onCreate() {
            setContentView(R.layout.popupwindow);
            btnOK = findViewById(R.id.dialog_ok);
            btnOK.setOnClickListener(new android.view.View.OnClickListener() {
                @Override
                public void onClick(View paramView) {
                    Log.i(FTTAG, "Click ok for update config");
                    result = 1;
                    finishDialog();
                }
            });
            btnCancel = findViewById(R.id.dialog_cancel);
            btnCancel.setOnClickListener(new android.view.View.OnClickListener() {
                @Override
                public void onClick(View paramView) {
                    Log.i(FTTAG, "Click cancel for update config");
                    result = 0;
                    finishDialog();
                }
            });
            tvMessage = findViewById(R.id.dialog_message);
			tvPrompt = findViewById(R.id.dialog_prompt);
			
			btnOK.setText("是");
			btnCancel.setText("否");
			tvPrompt.setText("配置更新");
        }

        /**
         * 结束对话框,将触发返回result对象
         */
        public void finishDialog(){
            mHandler.sendEmptyMessage(0);
        }

        /**
         * 显示同步对话框
         * @return 返回result对象
         */
        public int showDialog() {
            super.show();
            try {
                Looper.getMainLooper();
                mHandler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        if (SynDialog.this.isShowing()) {
                            SynDialog.this.dismiss();
                            throw new RuntimeException();
                        }
                    }
                };
                Looper.loop();
            } catch (Exception e) {
            }
            return result;
        }
        public int showDialog(int delayMs) {
            super.show();
            try {
                Looper.getMainLooper();
                mHandler = new Handler() {
                    @Override
                    public void handleMessage(Message msg) {
                        if (SynDialog.this.isShowing()) {
                            SynDialog.this.dismiss();
                            throw new RuntimeException();
                        }
                    }
                };
                mHandler.sendMessageDelayed(Message.obtain(), delayMs);
                Looper.loop();
            } catch (Exception e) {
            }
            return result;
        }
    }


用法:

mDialog = new SynDialog(MainActivity.this, true);
        mDialog.setMessage("发现SD卡,是否更新配置文件?\n" +
                "按键Up选择是,按键Down选择否");
        if (mDialog.showDialog() == 0) {
            return false;
        }


        mDialog = new SynDialog(MainActivity.this, false);
        if (needReboot) {
            mDialog.setMessage("配置有更新, 系统3s后将自动重启!");
        } else {
            mDialog.setMessage("配置没有发生变化, 请拔掉SD卡\n" +
                    "本窗口3s后关闭");
        }
        mDialog.showDialog(3000);


不能在线程中使用.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值