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