2016-04-14 42 views
2

Bir iletişim pencerem var ve bir zaman gecikmesinden sonra görüşme sırasında dışarıda bırakılmasını istiyorum.İletişim kutusu kapanma gecikmesi - Android

Eğer bunu yaparsam -

dialog.setCanceledOnTouchOutside(false); 

Ve bunun un iptal edilebilen yaptık beri

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

açıkçası, işe yaramaz, altta yatan bir görünüme dokunmatik dinleyici ekleyin.

Ama eğer bunu yaparsam -

dialog.setCanceledOnTouchOutside(true); 

ben işten gecikmeyi kontrol edemez.

Herhangi bir pencere özelliği vb. Bunu denetlemek için kullanabilir miyim? Dış diyaloğa dokunma etkinliğini nasıl izleyebilirim?

+0

idk .. iyi diyalog yerine yarı saydam etkinliği kullanabilir ve tüm dokunuşlarla başa çıkabilirsiniz. –

cevap

1

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

Sonra "elle" oluşturmalısınız basan özel bir Dialog oluşturabilir senin Dialog: Eğer kötü bir UX olabileceğini coz bunu istiyorum neden

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