1.  直接上代码

 1 dialog.setOnKeyListener(new OnKeyListener() {
 2             @Override  
 3             public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
 4       // event.getRepeatCount()==0:重复的次数,使得代码更健壮
 5                 if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount()==0){ // 返回
 6                     MLog.d("---------dialog-- onKeyDown-----KEYCODE_BACK -------------------");
 7                 } else if(keyCode == KeyEvent.KEYCODE_VOLUME_DOWN && event.getAction() == KeyEvent.ACTION_UP) { // 按下
 8                     MLog.d("---------dialog-- onKeyDown-----KEYCODE_VOLUME_DOWN -------------------");
 9                 } else if(keyCode == KeyEvent.KEYCODE_VOLUME_UP && event.getAction() == KeyEvent.ACTION_UP) {// 按上
10                     MLog.d("---------dialog-- onKeyDown-----KEYCODE_VOLUME_UP -------------------");
11                 }
12                 return false;  
13             }  
14         });

2. dialog.setCanceledOnTouchOutside(true); // 点击dialog的空白处关闭dialog