Eu tenho uma PopupWindow em minha atividade, o que acontece é que minha PopupWindow ainda é exibida mesmo quando estou interagindo com minha atividade (digamos, rolando em minha lista). Posso rolar minha lista e a PopupWindow ainda está lá.
O que eu quero alcançar é quando estou tocando / rolando / clicando / etc na tela que não é a PopupWindow, eu quero descartar a PopupWindow. Exatamente como funciona um menu. Se você clicou fora do menu, o menu será descartado.
Já tentei, setOutsideTouchable(true)
mas não fecha a janela. Obrigado.
android
popupwindow
android-menu
aldeão
fonte
fonte
BitmapDrawable()
está obsoleto. Use em seuColorDrawable()
lugar.Descobri que nenhuma das respostas fornecidas funcionou para mim, exceto o comentário do WareNinja sobre a resposta aceita, e o de Marcin S. provavelmente também funcionará. Aqui está a parte que funciona para mim:
Alternativamente:
Não tenho certeza de quais são as diferenças, mas o código-fonte ListPopupWindow realmente usa o último quando sua modalidade é definida como verdadeira com setModal, então pelo menos os desenvolvedores do Android consideram esta uma abordagem viável, e é apenas uma linha.
fonte
setFocusable
, precisamos clicar no botão duas vezes (onde o botão é colocado fora do pop-up) onde, como no primeiro método, funciona bem :)BitmapDrawable()
é depreciado. Use em seuColorDrawable()
lugar.Eu encontrei os mesmos problemas e corrigi-los conforme os códigos abaixo. Isso funciona bem para mim.
BTW, não use o construtor obsoleto BitmapDrawable, use este novo ColorDrawable (android.R.color.transparent) para substituir o fundo padrão.
Diverta-se@.@
fonte
Eu sei que é tarde, mas noto que as pessoas ainda têm problemas com a janela pop-up. Decidi escrever um exemplo totalmente funcional onde você pode descartar a janela pop-up tocando ou clicando fora dela ou apenas tocando na própria janela. Para fazer isso, crie uma nova classe PopupWindow e copie este código:
PopupWindow.class
Agora crie o layout para a janela pop-up: popup.xml
Em sua atividade principal, crie uma instância da classe PopupWindow:
onde YOUR_MAIN_LAYOUT é o layout da atividade atual em que popupWindow aparecerá
fonte
Obrigado pela resposta de @LunaKong e confirmação de @ HourGlass. Não quero fazer um comentário duplicado, mas apenas torná-lo claro e conciso.
Mttdat.
fonte
Para
ListPopupWindow
definir a janela como modal quando exibida.Dessa forma, clicar fora do
ListPopupWindow
irá dispensá-lo.fonte
mListPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
evitar que a janela pop-up interfira no teclado na tela.Observe que para cancelar com
popupWindow.setOutsideTouchable(true)
, você precisa fazer largura e alturawrap_content
como o código abaixo:fonte
Ele irá dispensar a PopupWindow quando clicar / tocar na tela. Certifique-se de definir o focusable true antes de showAtLocation.
fonte
Você pode usar
isOutsideTouchable
OUisFocusable
para ignorar a janela pop-up ao tocar foraNota
Atualmente, após o teste, não vejo
setBackgroundDrawable
como nos ajudar a dispensar a janela pop-upSe você olhar o código para dispensar em
PopupWindow
(PopupWindow->PopupDecorView->dispatchKeyEvent
ePopupWindow->PopupDecorView->onTouchEvent
). Você verá que, ao pressionar o botão Voltar, eles dispensamACTION_UP
e, quando tocam externamente, dispensamACTION_UP
ouACTION_OUTSIDE
fonte
O trabalho de sugestões do @LunaKong é um encanto.
Mas configurando mPopupWindow.setFocusable (false). remove o toque desnecessário necessário para fazer a janela pop-up desaparecer.
Por exemplo: Vamos considerar que há uma janela pop-up visível na tela e você está prestes a clicar em um botão. Portanto, neste caso, (if mpopwindow.setFocusable (true)) no primeiro clique de um botão a janela popup será descartada. Mas você tem que clicar novamente para fazer o botão funcionar. if ** (mpopwindwo.setFocusable (false) ** um único clique no botão ignora a janela pop-up e também aciona o clique do botão. Espero que ajude.
fonte
fonte
Defina o fundo da janela como transparente:
Depois de definir o plano de fundo no layout. Funciona bem.
fonte
Em alguns casos, tornar o pop-up focalizável não é desejável (por exemplo, você pode não querer que ele roube o foco de outra visualização).
Uma abordagem alternativa é usar um interceptor de toque:
fonte
Use View popupView para dispensar a popupWindow
`Se você usar isso, você também pode definirOnClickListener para qualquer botão dentro da janela pop-up
fonte