2015-12-09 4 views
1

Я хочу нажать кнопку «Назад», чтобы закрыть PopupWindow. Но я также могу щелкнуть снаружи, чтобы сделать что-то еще, PopupWindow не пропустите. Я пробовал popupWindow.setFocusable(true);, но PopupWindow будет уволен, когда я выйду наружу. Я стараюсь, чтобы пользовательский вид.PopupWindow - Отклонение при нажатии, но не снаружи

public class OtherBrifeIntroView extends LinearLayout 
{ 
@Override 
    public boolean dispatchKeyEvent(KeyEvent event) 
    { 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) 
     { 
      Toast.makeText(mContext, "test", Toast.LENGTH_SHORT).show(); 
      return true; 
     } 
     return super.dispatchKeyEvent(event); 
    } 

} 

но он не работает. Можете ли вы мне помочь?

+0

http://stackoverflow.com/questions/10577596/issue-dismissing-popup-window, это поможет. – HourGlass

ответ

0

Вы можете позвонить по телефону popupWindow.dismiss(), чтобы вручную убрать PopupWindow в рамках вашего метода dispatchKeyEvent. Чтобы остановить его, когда вы касаетесь снаружи PopupWindow, вы можете попробовать несколько вещей.

popupWindow.setOutsideTouchable(true); 
popupWindow.setTouchable(true); 
popupWindow.setBackgroundDrawable(new BitmapDrawable()); 

Have пьесы о с указанными выше значениями и посмотреть, что результат, я не на моем компьютере разработчиков на данный момент так не может проверить, какой он есть.

+0

не работает, но спасибо. –

1

Я решаю его. Установить TouchModal false, но setTouchModal скрывается, поэтому я использую отражатель.

public static void setPopupWindowTouchModal(PopupWindow popupWindow, boolean touchModal) 
    { 
     if (null == popupWindow) 
     { 
      return; 
     } 
     Method method; 
     try 
     { 
      method = PopupWindow.class.getDeclaredMethod("setTouchModal", boolean.class); 
      method.setAccessible(true); 
      method.invoke(popupWindow, touchModal); 

     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 

И наконец.

setPopupWindowTouchModal(popupWindow, false); 
popupWindow.setFocusable(true); 
+0

Ответ Эгоса Чжана абсолютно прав. Однажды я пытался решить эту проблему. Я проверил этот флаг с 4.1 и 6 версиями os. - Пост для Михаила Гаева – Noumenon

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