Saya memiliki PopupWindow di aktivitas saya, masalahnya adalah PopupWindow saya masih muncul bahkan ketika saya berinteraksi dengan aktivitas saya (katakanlah menggulir di daftar saya). Saya dapat menggulir daftar saya dan PopupWindow masih ada.
Apa yang ingin saya capai adalah ketika saya menyentuh / menggulir / mengklik / dll pada layar yang bukan PopupWindow, saya ingin menutup PopupWindow. Sama seperti cara kerja menu. Jika Anda mengklik di luar menu, menu tersebut akan ditutup.
Saya sudah mencoba setOutsideTouchable(true)
tetapi tidak menutup jendela. Terima kasih.
android
popupwindow
android-menu
orang desa
sumber
sumber
BitmapDrawable()
dikosongkan. GunakanColorDrawable()
sebagai gantinya.Saya menemukan bahwa tidak ada jawaban yang diberikan yang berhasil untuk saya, kecuali komentar WareNinja pada jawaban yang diterima, dan kemungkinan Marcin S. juga akan bekerja. Inilah bagian yang berhasil untuk saya:
Kalau tidak:
Tidak yakin apa perbedaannya, tetapi kode sumber ListPopupWindow benar-benar menggunakan yang terakhir ketika modalnya disetel ke true dengan setModal, jadi setidaknya pengembang Android menganggap ini sebagai pendekatan yang layak, dan itu hanya satu baris.
sumber
setFocusable
, kita perlu mengklik tombol dua kali (di mana tombol ditempatkan di luar pop-up) dimana seperti pada metode pertama ini berfungsi dengan baik :)BitmapDrawable()
depricated. GunakanColorDrawable()
sebagai gantinya.Saya menemui masalah yang sama, dan memperbaikinya seperti kode di bawah ini. Ini bekerja dengan baik untuk saya.
BTW, Jangan gunakan konstruktor BitmapDrawable deprecated, gunakan ColorDrawable baru ini (android.R.color.transparent) untuk mengganti latar belakang default.
Selamat bersenang-senang@.@
sumber
Saya tahu ini sudah terlambat tetapi saya perhatikan bahwa orang-orang masih memiliki masalah dengan jendela popup. Saya telah memutuskan untuk menulis contoh yang berfungsi penuh di mana Anda dapat menutup jendela popup dengan menyentuh atau mengeklik di luarnya atau hanya menyentuh jendela itu sendiri. Untuk melakukannya buat kelas PopupWindow baru dan salin kode ini:
PopupWindow.class
Sekarang buat tata letak untuk jendela popup: popup.xml
Dalam aktivitas utama Anda, buat instance kelas PopupWindow:
dimana YOUR_MAIN_LAYOUT adalah tata letak aktivitas saat ini di mana popupWindow akan muncul
sumber
Terima kasih atas jawaban @ LunaKong dan konfirmasi @ HourGlass. Saya tidak ingin membuat komentar duplikat, tetapi hanya ingin membuatnya jelas dan ringkas.
Mttdat.
sumber
Untuk
ListPopupWindow
mengatur jendela menjadi modal saat ditampilkan.Dengan begitu, mengklik di luar
ListPopupWindow
akan menutupnya.sumber
mListPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED);
, untuk mencegah jendela popup mengganggu keyboard di layar.Perhatikan bahwa untuk membatalkan dengan
popupWindow.setOutsideTouchable(true)
, Anda perlu membuat lebar dan tinggiwrap_content
seperti kode di bawah ini:sumber
Ini akan menutup PopupWindow saat klik / sentuh di layar. Pastikan Anda telah mengatur focusable true sebelum showAtLocation.
sumber
Anda dapat menggunakan
isOutsideTouchable
ATAUisFocusable
untuk menutup jendela pop-up saat menyentuh di luarCatatan
Saat ini, setelah pengujian saya melihat
setBackgroundDrawable
tidak membantu kami menutup jendela popupJika Anda melihat kode untuk diberhentikan di
PopupWindow
(PopupWindow->PopupDecorView->dispatchKeyEvent
danPopupWindow->PopupDecorView->onTouchEvent
). Anda akan melihat bahwa ketika menekan tombol kembali, mereka mengabaikanACTION_UP
dan ketika menyentuh di luar mereka menutupACTION_UP
atauACTION_OUTSIDE
sumber
sumber
Saran @LunaKong bekerja seperti pesona.
Tetapi menyiapkan mPopupWindow.setFocusable (false).menghapus sentuhan yang tidak perlu yang diperlukan untuk menghilangkan jendela popup.
Misalnya: Anggap saja ada jendela pop-up yang terlihat di layar, dan Anda akan mengklik tombol. Jadi dalam kasus ini, (jika mpopwindow.setFocusable (true)) pada klik pertama tombol popupwindow akan ditutup. Tetapi Anda harus mengklik lagi untuk membuat tombol berfungsi. jika ** (mpopwindwo.setFocusable (false) ** satu klik tombol tutup jendela popup serta memicu klik tombol. Semoga membantu.
sumber
Setel latar belakang jendela transparan:
Setelah itu atur latar belakang Anda dalam tata letak. Bekerja dengan baik.
sumber
Dalam beberapa kasus, membuat munculan dapat difokuskan tidak diinginkan (misalnya Anda mungkin tidak ingin munculan mencuri fokus dari tampilan lain).
Pendekatan alternatif menggunakan interceptor sentuh:
sumber
Jika Jendela Popup ini adalah aktivitas lain, dan Anda mengurangi ukurannya ke layar asli dan Anda ingin mengaktifkan atau menonaktifkan area luar. Anda cukup mengaktifkan atau menonaktifkan area luar dengan kode ini:
memungkinkan:
YourActivity.this.setFinishOnTouchOutside(true);
nonaktifkan:
YourActivity.this.setFinishOnTouchOutside(false);
sumber
Gunakan View popupView untuk menutup popupWindow
`Jika Anda menggunakan ini, Anda juga dapat menyetelOnClickListener ke sembarang tombol di dalam jendela popup
sumber