Обнаружение щелчка по диалоговому окну в Android - PullRequest
5 голосов
/ 16 августа 2011

У меня есть диалог:

final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.location_dialog);
dialog.setTitle("My dialog");
dialog.setMessage("My dialog's content");
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.show();

Я хочу иметь возможность обнаруживать касания за пределами строк диалогового окна. Я могу легко обнаружить любые прикосновения за пределами области диалогового окна с помощью встроенного метода

dialog.setCanceledOnTouchOutside(true);

Но как я могу обнаружить прикосновения внутри этой области? detect touches only in the area in red.

1 Ответ

8 голосов
/ 16 августа 2011

Создайте расширение Dialog и переопределите необходимый метод: dispatchTouchEvent или onTouchEvent (Из документов: это наиболее полезно для обработки событий касания, которые происходят за пределами границ вашего окна, где естьНет представления для его получения.)

Обновлено:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Rect dialogBounds = new Rect();
    getWindow().getDecorView().getHitRect(dialogBounds);

    if (dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
        Log.d("test", "inside");
    } else {
        Log.d("test", "outside");
    }
    return super.dispatchTouchEvent(ev);
}
...