2016-04-14 80 views
2

我有一个对话框,我希望它可以在延迟一段时间后在外面进行触摸。对话框解除延迟 - Android

如果我这样做 -

dialog.setCanceledOnTouchOutside(false); 

,并添加触摸监听到一个基本观点,

listview.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View view, MotionEvent motionEvent) { 
       (new Handler()).postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         dialog.dismiss(); 
        } 
       }, 500); 
      } 
      return false; 
     } 
    }); 

显然是行不通的,因为我做了它未取消。

但如果我这样做 -

dialog.setCanceledOnTouchOutside(true); 

我无法控制解雇的延迟。

任何窗口属性等我可以用它来控制这个?我如何跟踪外部对话框触摸事件?

+0

IDK的你为什么会想的是怎么把它可能是一个坏UX ..那么你可以使用半透明的活动,而不是对话,并处理所有的触摸。 –

回答

1

您可以创建自定义Dialog覆盖onTouchEvent

private class MyDialog extends Dialog{ 

     // constructors 

     @Override 
     public boolean onTouchEvent(MotionEvent event) { 
      Rect dialogRect = new Rect(); 
      getWindow().getDecorView().getHitRect(dialogRect); 

      if (!dialogRect.contains((int) event.getX(), (int) event.getY())) { 
       try { 
        Thread.sleep(500); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
       this.cancel(); 
      } 

      return super.onTouchEvent(event); 
     } 
    } 

那么你应该 “手工” 创建Dialog

MyDialog myDialog = new MyDialog(this); 
myDialog.setTitle("Dialog Title"); 
myDialog.setContentView(R.layout.dialog_layout); 
myDialog.show();