2015-04-13 5 views
0

Обратите внимание: эта проблема касается 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; 
      } 
     } 
    }; 
} 

}

ответ

0

попробовать это:

setOutsideTouchable(true);

вызов это в конструкторе

Смежные вопросы