Saya telah menerapkan dialog khusus untuk aplikasi saya. Saya ingin menerapkan itu ketika pengguna mengklik di luar dialog, dialog akan diberhentikan. Apa yang harus saya lakukan untuk ini?
sumber
Saya telah menerapkan dialog khusus untuk aplikasi saya. Saya ingin menerapkan itu ketika pengguna mengklik di luar dialog, dialog akan diberhentikan. Apa yang harus saya lakukan untuk ini?
Anda dapat menggunakan dialog.setCanceledOnTouchOutside(true);
yang akan menutup dialog jika Anda menyentuh di luar dialog.
Sesuatu seperti,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
Atau jika Dialog Anda bukan model,
1 - Tetapkan flag- FLAG_NOT_TOUCH_MODAL
untuk atribut jendela dialog Anda
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - Tambahkan bendera lain ke properti windows ,, FLAG_WATCH_OUTSIDE_TOUCH
- ini untuk dialog untuk menerima acara sentuh di luar wilayah yang terlihat.
3 - Ganti onTouchEvent()
dialog dan periksa jenis tindakan. jika jenis tindakan adalah ' MotionEvent.ACTION_OUTSIDE
' berarti, pengguna berinteraksi di luar wilayah dialog. Jadi dalam hal ini, Anda dapat mengabaikan dialog Anda atau memutuskan apa yang ingin Anda lakukan. lihat cetak polos?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
Untuk info lebih lanjut, lihat Cara mengabaikan dialog khusus berdasarkan titik sentuh? dan Cara mengabaikan dialog non-modal Anda, ketika disentuh di luar wilayah dialog
Cukup gunakan
sumber
Anda dapat menggunakan implementasi onTouchEvent ini. Ini mencegah dari bereaksi di bawah aktivitas ke acara sentuhan (seperti yang disebutkan howettl).
Sumber: http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
sumber
Atau, jika Anda menyesuaikan dialog menggunakan tema yang ditentukan dalam xml gaya Anda, masukkan baris ini dalam tema Anda:
sumber
dialog.setCanceledOnTouchOutside(true);
bekerja dengan sangat baik.untuk menutup dialog saat disentuh di luar.
Dan jika Anda tidak ingin menutup sentuhan di luar, gunakan kode di bawah ini:
sumber
Metode ini harus sepenuhnya menghindari aktivitas di bawah area abu-abu yang mengambil peristiwa klik.
Hapus baris ini jika Anda memilikinya:
Letakkan ini di aktivitas Anda yang dibuat
kemudian timpa acara sentuh dengan ini
sumber
Anda dapat mencoba ini: -
atau
Dan jika Anda memiliki
AlterDialog.Builder
Maka Anda dapat mencoba ini: -sumber
Kode ini digunakan untuk ketika menggunakan klik pada kotak dialog yang menyembunyikan input dan ketika pengguna mengklik sisi luar kotak dialog yang waktu softinput dan kotak dialog ditutup.
sumber
Solusi lain, kode ini diambil dari kode sumber android.
Window
Anda harus menambahkan kedua metode ini ke kode sumber dialog Anda.Solusi ini tidak memiliki masalah ini:
sumber
Panggil
dialog.setCancelable(false);
dari aktivitas / fragmen Anda.sumber
Berikut ini berhasil bagi saya:
sumber
Anda dapat membuat
background
menempati semua ukuran layartransparent
dan mendengarkanonClick
acaradismiss
itu.sumber
Ini kodenya
Coba yang ini . Anda dapat menyembunyikan keyboard saat menyentuh di luar
sumber