Zaimplementowałem niestandardowe okno dialogowe dla mojej aplikacji. Chcę zaimplementować, że gdy użytkownik kliknie poza oknem dialogowym, okno dialogowe zostanie zamknięte. Co mam z tym zrobić?
źródło
Zaimplementowałem niestandardowe okno dialogowe dla mojej aplikacji. Chcę zaimplementować, że gdy użytkownik kliknie poza oknem dialogowym, okno dialogowe zostanie zamknięte. Co mam z tym zrobić?
Możesz użyć polecenia, dialog.setCanceledOnTouchOutside(true);
które zamknie okno dialogowe, jeśli dotkniesz poza nim.
Coś jak,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
Lub jeśli Twój Dialog jest inny niż model,
1 - Ustaw flagę - FLAG_NOT_TOUCH_MODAL
dla atrybutu okna dialogowego
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - Dodaj kolejną flagę do właściwości okna, FLAG_WATCH_OUTSIDE_TOUCH
- ta opcja służy do odbierania przez okno dialogowe zdarzenia dotyku poza jego widocznym obszarem.
3 - Zastąp onTouchEvent()
okno dialogowe i sprawdź typ akcji. jeśli typ akcji to „ MotionEvent.ACTION_OUTSIDE
” oznacza, że użytkownik wchodzi w interakcję poza obszarem dialogu. W takim przypadku możesz zamknąć okno dialogowe lub zdecydować, co chcesz wykonać. wyświetlić zwykły druk?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
Aby uzyskać więcej informacji, zobacz Jak zamknąć niestandardowe okno dialogowe oparte na punktach dotykowych? i jak zamknąć okno dialogowe niemodalne po dotknięciu poza obszarem dialogu
Po prostu użyj
źródło
Możesz użyć tej implementacji onTouchEvent. Zapobiega reagowaniu pod działaniem na zdarzenie dotykowe (jak wspomniano w Howettl).
Źródło: http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
źródło
Lub, jeśli dostosowujesz okno dialogowe za pomocą motywu zdefiniowanego w twoim stylu xml, umieść ten wiersz w swoim motywie:
źródło
dialog.setCanceledOnTouchOutside(true);
działa cudownie.aby zamknąć okno dialogowe dotyku na zewnątrz.
A jeśli nie chcesz zamykać na zewnątrz dotykiem, użyj poniższego kodu:
źródło
Ta metoda powinna całkowicie unikać działań poniżej szarego obszaru pobierających zdarzenia kliknięcia.
Usuń tę linię, jeśli ją masz:
Umieść to na utworzonej aktywności
następnie zastąp zdarzenie dotyku tym
źródło
Możesz spróbować tego: -
lub
A jeśli masz
AlterDialog.Builder
, możesz spróbować tego: -źródło
Ten kod jest używany do kliknięcia okna dialogowego, które powoduje ukrycie wejścia i gdy użytkownik kliknie zewnętrzną stronę okna dialogowego, gdy zarówno programowe wejście, jak i okno dialogowe są zamknięte.
źródło
Inne rozwiązanie, ten kod został wzięty z kodu źródłowego Androida
Window
Powinieneś po prostu dodać te dwie metody do kodu źródłowego okna dialogowego.To rozwiązanie nie ma tego problemu:
źródło
Zadzwoń
dialog.setCancelable(false);
z Twojej aktywności / fragmentu.źródło
Pomogło mi:
źródło
Możesz zająć
background
cały rozmiar ekranutransparent
i słuchać tegoonClick
wydarzeniadismiss
.źródło
Oto kod
Spróbuj tego . możesz ukryć klawiaturę, gdy dotkniesz na zewnątrz
źródło