Theme.Dialogスタイルを使用しているアクティビティがあるため、別のアクティビティの上にフローティングウィンドウが表示されます。しかし、ダイアログウィンドウの外側(バックグラウンドアクティビティ上)をクリックすると、ダイアログが閉じます。この動作を停止するにはどうすればよいですか?
Theme.Dialogスタイルを使用しているアクティビティがあるため、別のアクティビティの上にフローティングウィンドウが表示されます。しかし、ダイアログウィンドウの外側(バックグラウンドアクティビティ上)をクリックすると、ダイアログが閉じます。この動作を停止するにはどうすればよいですか?
回答:
これはあなたを助けるでしょう。これは、タッチ外部イベントを処理する方法です。
ウィンドウの外でタッチしたときに、アクティビティをテーマにしたダイアログをキャンセルするにはどうすればよいですか?
イベントをキャッチして何もしないことで、クローズを防ぐことができると思います。ただし、奇妙なのは、アクティビティダイアログのデフォルトの動作では、外に触れたときにそれ自体が閉じないようにすることです。
(PS:コードはWindowManager.LayoutParamsを使用します)
戻るキーが押されたときにダイアログボックスが閉じないようにするには、これを使用します
dialog.setCancelable(false);
そして、ダイアログボックスが外部のタッチで閉じられるのを防ぐために、これを使用してください
dialog.setCanceledOnTouchOutside(false);
AlertDialog
が外で閉ざされないようにする方法を探しているのではないかと思います。それが、この回答が提供するものです。
setCancelable(false)
実際に持っているのは(ダイアログのように見えても)アクティビティなのでsetFinishOnTouchOutside(false)
、バックグラウンドアクティビティがクリックされたときに開いたままにしたい場合は、アクティビティから呼び出す必要があります。
編集:これはAndroid APIレベル11以上でのみ機能します
onBackPressed()
、本文で何もしないこともオーバーライドする必要があります。
私にとってうまくDialogFragment
いったのは、キャンセルできないようにセットを作成することでした:
dialog.setCancelable(false);
キャンセル可能なダイアログをfalseに設定するだけで十分です。アラートダイアログの外側をタッチするか、戻るボタンをクリックすると、アラートダイアログが非表示になります。だからこれを使う:
setCancelable(false)
そして、他の機能はもう必要ありません:
dialog.setCanceledOnTouchOutside(false);
一時的なダイアログを作成していて、このコード行を配置しようと思っている場合は、次の例をご覧ください。
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();
それが私のために働いているこのコードを使用してください
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.
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
単に、
alertDialog.setCancelable(false);
ユーザーがダイアログボックスの外側をクリックできないようにします。
Alert Dialogは非推奨であるため、Dialog dialog = new Dialog(this);を使用してください。
外のタッチでの接近を防ぐため
dialog.setCanceledOnTouchOutside(false);
setFinishOnTouchOutside(false)
API> 11に使用します。アクティビティをテーマにしたダイアログがAPI <11の外部タッチで終了しないというAndroidのデフォルトの動作なので心配する必要はありません。
私はこれをonCreate()で使用しています。Androidのどのバージョンでも機能するようです。5.0および4.4.xでテストされていますが、Gingerbreadではテストできません。Samsungデバイス(GBを実行している注1)では、デフォルトで次のようになっています。
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);
これはあなたに役立つと思います。
onCancelListenerを実装するさまざまなアクションを割り当てることもできます。
alertDialog.setOnCancelListener(new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialogInterface) {
//Your custom logic
}
});
builder.setCancelable(false);
public void Mensaje(View 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();
}
これは、すべての質問に対する完全な回答です。Androidでコーディングを楽しんでください。
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();