Обратите внимание: эта проблема касается Android PopupWindow, а не Dialog.Android non модальный PopupWindow
Я пытаюсь сделать Android PopupWindow покадрово:
- При нажатии ВНУТРИ окна, я хочу вид окна реагировать на мыши обычно
- При нажатии вне окна, Я хочу, чтобы щелчок обычно получался (я имею в виду MotionEvent) другими графическими элементами вне окна, как если бы PopupWindow не показывался.
Я установил сенсорный прослушиватель в окне содержимого в PopupWindow, чтобы проверить, находится ли событие вне PopupWindow, и если да, то для возврата false. Я ожидал бы, что MotionEvent будет распространен на представление, где я щелкнул. Но кажется, что, поскольку эти представления находятся за пределами текущего окна, они не получают событие.
Как я могу распространить событие на вид, где я щелкнул, даже если он находится вне PopupWindow?
public class NonModalPopupWindow extends PopupWindow {
private static final String TAG = "NonModalPopupWindow";
public NonModalPopupWindow(View contentView, int width, int height) {
super(width, height);
setContentView(contentView);
contentView.setOnTouchListener(createOnTouchListener());
setFocusable(true);
}
private View.OnTouchListener createOnTouchListener() {
return new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int x = (int) event.getX();
final int y = (int) event.getY();
final boolean isTouchOutside = (x < 0) || (x >= getWidth()) || (y < 0) || (y >= getHeight());
if (isTouchOutside || event.getAction() == MotionEvent.ACTION_OUTSIDE) {
Log.e(TAG, "Touched OUTSIDE");
// How to propagate this event so that it's received by the View shown
// At the location where I clicked, outside of the PopupWindow?
return false;
} else {
Log.e(TAG, "Touched INSIDE");
return true;
}
}
};
}
}