Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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 按“后退”按钮关闭弹出窗口_Android_Android Popupwindow - Fatal编程技术网

Android 按“后退”按钮关闭弹出窗口

Android 按“后退”按钮关闭弹出窗口,android,android-popupwindow,Android,Android Popupwindow,我想通过单击弹出窗口外部或后退按钮来关闭弹出窗口,但当单击后退按钮时,我的应用程序退出,而不是退出应用程序,我想关闭弹出窗口 这是我的密码 ivmainmenu.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub LayoutInflater layoutInfl

我想通过单击弹出窗口外部或后退按钮来关闭弹出窗口,但当单击后退按钮时,我的应用程序退出,而不是退出应用程序,我想关闭弹出窗口

这是我的密码

ivmainmenu.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub

        LayoutInflater layoutInflater = (LayoutInflater)getBaseContext()
                .getSystemService(LAYOUT_INFLATER_SERVICE);  
        View popupView = layoutInflater.inflate(R.layout.popupwindow, null);  
        final PopupWindow popupWindow = new PopupWindow(popupView,LayoutParams.FILL_PARENT,
                LayoutParams.WRAP_CONTENT);  
        popupWindow.showAsDropDown(ivmainmenu, 0,14);
        popupView.setPadding(0, 0, 0, 10);
        popupWindow.showAsDropDown(ivmainmenu);

        popupWindow.setBackgroundDrawable(new BitmapDrawable());
        popupWindow.setOutsideTouchable(false);

        TextView tvpopupwork = (TextView)popupView.findViewById(R.id.tvpopupwork);
        TextView tvpopupabout = (TextView)popupView.findViewById(R.id.tvpopupabout);
        TextView tvpopupservices = (TextView)popupView.findViewById(R.id.tvpopupservices);
        TextView tvpopupcontact = (TextView)popupView.findViewById(R.id.tvpopupcontact);

        Typeface typeFace2 =  Typeface.createFromAsset(getAssets(),"fonts/arboriaboldregular.ttf");
        tvpopupwork.setTypeface(typeFace2);
        tvpopupabout.setTypeface(typeFace2);
        tvpopupservices.setTypeface(typeFace2);
        tvpopupcontact.setTypeface(typeFace2);

        tvpopupwork.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Home.this,Ourwork.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(intent);
            }
        });

        tvpopupabout.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Intent intent = new Intent(Home.this,Aboutus.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(intent);  
            }
        });

        tvpopupservices.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent intent = new Intent(Home.this,Services.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(intent);
            }
        });

        tvpopupcontact.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                Intent intent = new Intent(Home.this,Contact.class);
                intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
                startActivity(intent);
            }
        });

        ivmainmenu.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                popupWindow.dismiss();
            }
        });
    }
});
它给了我想要的结果,但当我关闭菜单时,它不会再次打开,我想再次打开它,那么我该怎么办? 谢谢。

更换

popupWindow.setOutsideTouchable(false);
用这个

popupWindow.setOutsideTouchable(true);
popupWindow.setFocusable(true);

尝试以下方法:实现
onBackPressed()
并添加

if(popup!=null) {
    popup.dismiss();
    popup=null;
}
并使用以下命令设置
PopWindow

popup.setOutsideTouchable(true);

您可以在代码中覆盖onBackPressed()回调,检查弹出窗口是否已经显示(然后将其关闭),否则您可以调用super以获得正常行为。

维护
PopUpWindow的全局引用
并覆盖
onBackPressed()

@Override
public void onBackPressed() {
    if (popupWindow != null && popupWindow.isShowing()) {
        popupWindow.dismiss();
    } else {
        super.onBackPressed();
    }
}
    ivmainmenu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(popupWindow != null && popupWindow.isShowing()) {
                popupWindow.dismiss();
                popupWindow = null;
            } else {
                // show pop up now
            }
        }
    });
通过相同的
按钮
关闭

@Override
public void onBackPressed() {
    if (popupWindow != null && popupWindow.isShowing()) {
        popupWindow.dismiss();
    } else {
        super.onBackPressed();
    }
}
    ivmainmenu.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            if(popupWindow != null && popupWindow.isShowing()) {
                popupWindow.dismiss();
                popupWindow = null;
            } else {
                // show pop up now
            }
        }
    });
试试这个

使用
PopupWindow-PopupWindow
作为全局变量

使用
popup.setOutsideTouchable(true)


请在反压(
)时写入
,并输入以下代码

if(popup!=null){
   //dismiss the popup
   popup.dismiss();
   //make popup null again
   popup=null;
}

@akky777当触摸在活动之外时,您将获得外部动作。但这只是为了满足我的要求,是否有任何解决方案可以通过相同的按钮关闭弹出窗口?@akky777由onBackPressed事件引起,是由宿主活动捕获的,而不是弹出窗口。如果(popupWindow!=null&&popupWindow.isShowing())我必须将背景设置为非null可绘制,至少
popupWindow.setBackgroundDrawable(新彩色可绘制(彩色透明))