<Android> 模态对话框

来源:互联网 发布:大数据公司是做什么的 编辑:程序博客网 时间:2024/06/05 04:59
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);


不能在线程中使用.


原创粉丝点击