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);