好的,所以我做了一个对话:
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!");
答案 0 :(得分:1)
我还添加了
setCanceledOnTouchOutside(true)
,但是它不起作用。
setCanceledOnTouchOutside()
无法正常工作,因为您已向您的setCancelable(false)
添加了 dialog
属性,这意味着当您单击时dialog
不会消失dialog
外部或按返回按钮
您需要从dialog.setCancelable(false);
方法中删除 showDialog()
设置
dialog
是否可取消。 默认为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();
}
}
答案 1 :(得分:1)
您犯了一个小而愚蠢的错误,
注释
dialog.setCancelable(false);
因为如果您希望在对话框区域之外单击时关闭对话框,那么将cancellable属性设置为false时,您希望如何关闭对话框。
更改它,它将起作用!
答案 2 :(得分:1)
dialog.setCancelable(false)不允许取消对话框。这就是为什么 dialog.setCanceledOnTouchOutside(true)没有显示任何效果的原因。
因此从代码中删除 dialog.setCancelable(false)。
答案 3 :(得分:0)
如果您的对话框具有样式,只需添加此属性
<item name="android:windowIsFloating">true</item>
设置样式,如果没有样式,则将自定义样式应用于对话框,然后将此属性添加到对话框中。 例如:
<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>
然后像这样使用它:
对话框对话框=新对话框(活动,R.style.DialogTheme); dialog.getWindow()。setWindowAnimations(R.style.DialogTheme);