Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android “在对话框中”;setCanceledOnTouchOutside();无法取消该框_Android_Dialog - Fatal编程技术网

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)