Başka bir etkinlik üzerinde yüzen bir pencere olduğu gibi Theme.Dialog stilini kullanan bir etkinlik var. Ancak, iletişim penceresinin dışını tıklattığımda (arka plan etkinliğinde), iletişim kutusu kapanır. Bu davranışı nasıl durdurabilirim?
Başka bir etkinlik üzerinde yüzen bir pencere olduğu gibi Theme.Dialog stilini kullanan bir etkinlik var. Ancak, iletişim penceresinin dışını tıklattığımda (arka plan etkinliğinde), iletişim kutusu kapanır. Bu davranışı nasıl durdurabilirim?
Yanıtlar:
Bu size yardımcı olabilir. Dış dokunma etkinliğini ele almanın bir yoludur:
Pencerenin dışına dokunduğunuzda Etkinlik gibi bir İletişim Kutusu nasıl iptal edilir?
Etkinliği yakalayıp hiçbir şey yapmadan, kapanmayı önleyebileceğinizi düşünüyorum. Ancak garip olan şey, etkinlik iletişim pencerenizin varsayılan davranışının, dışarıya dokunduğunuzda kendini kapatmak olmamasıdır .
(PS: kod WindowManager.LayoutParams kullanıyor)
İletişim kutusunun basılı tuşa bırakılmasını önlemek için bunu kullanın
dialog.setCancelable(false);
İletişim kutusunun dış dokunmada kapatılmasını önlemek için bunu kullanın
dialog.setCanceledOnTouchOutside(false);
AlertDialog
dışarıdan temas etmesini önlemenin bir yolunu aradığından şüpheleniyorum ve bu cevap da bunu sağlıyor.
setCancelable(false)
Gerçekte sahip olduğunuz bir Etkinliktir (bir İletişim Kutusuna benziyor olsa bile), bu nedenle setFinishOnTouchOutside(false)
arka plan etkinliği tıklandığında etkinliğini korumak istiyorsanız etkinliğinizden aramalısınız .
EDIT: Bu sadece android API seviye 11 veya üstü ile çalışır
onBackPressed()
vücudunda hiçbir şey yapmadan da geçersiz
Benim için işe DialogFragment
yarayan, iptal edilemeyecek bir set oluşturmaktı :
dialog.setCancelable(false);
İletişim kutusunu onCreate'de etkinlik olarak kullanırken bunu ekleyin
setFinishOnTouchOutside(false);
Daha yüksek API 10 için, Dialog dışarıya dokunduğunuzda kaybolur, ancak API 11'den düşük olduğunda, Diyalog kaybolmaz. Bunu önlemek için yapmanız gerekenler:
İçinde styles.xml
:<item name="android:windowCloseOnTouchOutside">false</item>
VEYA
İn onCreate()
yöntemi, kullanımı:this.setFinishOnTouchOutside(false);
Not: API 10 ve daha düşük sürümler için bu yöntemin bir etkisi yoktur ve gerekli değildir.
İletişim kutusunun yanlış olarak ayarlanabilmesi yeterlidir ve uyarı iletişim kutusunun dışına dokunduğunuzda veya geri düğmesini tıkladığınızda uyarı iletişim kutusu kaybolacaktır. Bu yüzden bunu kullanın:
setCancelable(false)
Ve diğer işlev artık gerekli değildir:
dialog.setCanceledOnTouchOutside(false);
Geçici bir iletişim kutusu oluşturuyorsanız ve bu kod satırını koymayı merak ediyorsanız, işte size bir örnek:
new AlertDialog.Builder(this)
.setTitle("Trial Version")
.setCancelable(false)
.setMessage("You are using trial version!")
.setIcon(R.drawable.time_left)
.setPositiveButton(android.R.string.yes, null).show();
Benim İçin Çalıştığı Bu Kodu Kullan
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
alertDialog.setCancelable(false);
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
//use this to dismiss the dialog on outside click of dialog
dialog.setCanceledOnTouchOutside(false);
//use this for not to dismiss the dialog on outside click of dialog.
İletişim hakkında daha fazla bilgi için bu bağlantıyı izleyin .
dialog.setCancelable(false);
//used to prevent the dismiss of dialog on backpress of that activity
dialog.setCancelable(true);
//used to dismiss the dialog on onbackpressed of that activity
basitçe,
alertDialog.setCancelable(false);
Kullanıcının İletişim Kutusu'nun dışını tıklamasını önleyin.
Uyarı İletişim Kutusu kullanımdan kaldırılmıştır, bu nedenle İletişim Kutusu iletişimini kullan = yeni İletişim Kutusu (this);
Dış dokunuşta kapanmayı önlemek için
dialog.setCanceledOnTouchOutside(false);
setFinishOnTouchOutside(false)
API> 11 için kullanın ve endişelenmeyin çünkü Android'in etkinlik temalı iletişim kutusunun varsayılan davranışı API <11 için dış dokunuşla bitmeyecek :) !! Şerefe !!
Ben onCreate () kullanmak, Android herhangi bir sürümü üzerinde çalışıyor gibi görünüyor; 5.0 ve 4.4.x üzerinde test edilmiştir, Gingerbread üzerinde test edilemez, Samsung cihazları (GB çalıştıran Not 1) varsayılan olarak şu şekilde bulunur:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
setFinishOnTouchOutside(false);
}
else
{
getWindow().clearFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
}
super.onCreate(savedInstanceState);
alert.setCancelable(false);
alert.setCanceledOnTouchOutside(false);
Sanırım bu sana yardımcı olacak.
İşte benim çözümüm:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select The Difficulty Level");
builder.setCancelable(false);
AyrıcaCancelListener üzerinde farklı eylemler uygulamak da mümkündür:
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialogInterface) {
//Your custom logic
}
});
Aynı sorunla karşı karşıyaydım. Bunu işlemek OntouchListener
için diyaloga a atarım ve içeride hiçbir şey yapmam. Ancak iletişim kutusu ekranı döndürürken de kapanır. Bunu düzeltmek için iletişim kutusunun normalde kapatılıp kapatılmadığını söyleyecek bir değişken ayarladım. Sonra OnDismissListener
iletişim kutusuna bir ayarladım ve içinde değişkeni kontrol ediyorum. Eğer iletişim kutusu normalde yoksaysa hiçbir şey yapmam, yoksa iletişim kutusunu tekrar çalıştırırım (ve durumumu işten çıkarırken olduğu gibi ayarlayarak).
builder.setCancelable (yanlış);
kamu boşluğu Mensaje (Görünüm v) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("¿Quieres ir a el Menú principal?");
builder.setMessage("Al presionar SI iras a el menú y saldras de la materia.");
builder.setPositiveButton("SI", null);
builder.setNegativeButton("NO", null);
builder.setCancelable(false);
builder.show();
}
Bu, tüm sorularınıza mükemmel bir cevaptır .... Umarım Android'de kodlamanın tadını çıkarırsınız
new AlertDialog.Builder(this)
.setTitle("Akshat Rastogi Is Great")
.setCancelable(false)
.setMessage("I am the best Android Programmer")
.setPositiveButton("I agree", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create().show();