Android “在对话框中”;setCanceledOnTouchOutside();无法取消该框
好的,我做了一个对话:Android “在对话框中”;setCanceledOnTouchOutside();无法取消该框,android,dialog,Android,Dialog,好的,我做了一个对话: package com.dharamshi.practice; import android.app.Activity; import android.app.Dialog; import android.view.View; import android.view.Window; import android.widget.Button; import android.widget.TextView; public class ViewDialog { p
package com.dharamshi.practice;
import android.app.Activity;
import android.app.Dialog;
import android.view.View;
import android.view.Window;
import android.widget.Button;
import android.widget.TextView;
public class ViewDialog {
public void showDialog(Activity activity, String msg){
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(true);
dialog.setCancelable(false);
dialog.setContentView(R.layout.dialog);
TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
text.setText(msg);
Button dialogButton = (Button) dialog.findViewById(R.id.btn_dialog);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
我希望对话框在点击对话框外的区域时自动关闭
我还添加了setCanceledOnTouchOutside(true),但它就是不起作用
我应该做什么改变才能让它正常工作
我这样称呼它:
ViewDialog alert = new ViewDialog();
alert.showDialog(this, "Its Working!");
我还添加了设置canceledontouchout(true)
,但它就是不起作用
setCanceledOnTouchOutside()
不起作用,因为您已将setCancelable(false)
属性添加到对话框
中,这意味着当您在对话框
外部单击或按后退按钮键时,对话框
不会关闭
解决方案
您需要删除对话框。setCancelable(false)代码>
从showDialog()
方法
设置对话框是否可取消默认值为true
示例代码
public class ViewDialog {
public void showDialog(Activity activity, String msg){
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(true);
dialog.setContentView(R.layout.dialog);
TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
text.setText(msg);
Button dialogButton = (Button) dialog.findViewById(R.id.btn_dialog);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
我还添加了设置canceledontouchout(true)
,但它就是不起作用
setCanceledOnTouchOutside()
不起作用,因为您已将setCancelable(false)
属性添加到对话框
中,这意味着当您在对话框
外部单击或按后退按钮键时,对话框
不会关闭
解决方案
您需要删除对话框。setCancelable(false)代码>
从showDialog()
方法
设置对话框是否可取消默认值为true
示例代码
public class ViewDialog {
public void showDialog(Activity activity, String msg){
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCanceledOnTouchOutside(true);
dialog.setContentView(R.layout.dialog);
TextView text = (TextView) dialog.findViewById(R.id.text_dialog);
text.setText(msg);
Button dialogButton = (Button) dialog.findViewById(R.id.btn_dialog);
dialogButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
dialog.show();
}
}
你犯了一个很小但很愚蠢的错误 点评
dialog.setCancelable(false);
因为,如果您希望在对话框区域外单击时关闭对话框,那么当您将cancelable属性设置为false时,您希望对话框如何关闭
改变它,它就会工作 你犯了一个小而愚蠢的错误 点评
dialog.setCancelable(false);
因为,如果您希望在对话框区域外单击时关闭对话框,那么当您将cancelable属性设置为false时,您希望对话框如何关闭
改变它,它就会工作 对话框。setCancelable(false)不允许取消对话框。这就是为什么对话框.setCanceledOnTouchOutside(true)没有显示任何效果
因此,从代码中删除对话框。可设置取消(false)。对话框。可设置取消(false)不允许取消对话框。这就是为什么对话框.setCanceledOnTouchOutside(true)没有显示任何效果
因此,从代码中删除对话框。setCancelable(false)。如果您有对话框的样式,只需添加此属性即可
<item name="android:windowIsFloating">true</item>
true
如果没有任何样式,请将自定义样式应用于对话框并将此属性添加到其中。
例如:
<style name="DialogTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowBackground">@color/transparentDark</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowEnterAnimation">@anim/fade_in</item>
<item name="android:windowExitAnimation">@anim/fade_out</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:statusBarColor">@color/statusBarColor</item>
</style>
真的
真的
@彩色/透明方格
@空的
真的
@动画/淡入
@动画/淡出
@颜色/颜色重音
@颜色/原色
@颜色/原色暗
@颜色/状态栏颜色
然后像这样使用它:
Dialog=新建对话框(活动,R.style.DialogTheme);
dialog.getWindow().setWindowAnimations(R.style.DialogTheme) 如果对话框有样式,只需添加此属性即可
<item name="android:windowIsFloating">true</item>
true
如果没有任何样式,请将自定义样式应用于对话框并将此属性添加到其中。
例如:
<style name="DialogTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowBackground">@color/transparentDark</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowEnterAnimation">@anim/fade_in</item>
<item name="android:windowExitAnimation">@anim/fade_out</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="android:statusBarColor">@color/statusBarColor</item>
</style>
真的
真的
@彩色/透明方格
@空的
真的
@动画/淡入
@动画/淡出
@颜色/颜色重音
@颜色/原色
@颜色/原色暗
@颜色/状态栏颜色
然后像这样使用它:
Dialog=新建对话框(活动,R.style.DialogTheme);
dialog.getWindow().setWindowAnimations(R.style.DialogTheme)