2016-04-14 15 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); 

を私は解雇の遅延を制御することはできません。

これを制御するために使用できるウィンドウのプロパティなどはありますか?外部のダイアログタッチイベントをどのように追跡できますか?あなたが次にあなたが "手動" あなた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を作成することができ

+0

はIDKの..ダイアログの代わりに半透明のアクティビティを使用して、すべてのタッチを処理できます。 –

答えて

1

:あなたはだって、それは悪いUXかもしれないことを望む理由

MyDialog myDialog = new MyDialog(this); 
myDialog.setTitle("Dialog Title"); 
myDialog.setContentView(R.layout.dialog_layout); 
myDialog.show(); 
関連する問題