0

我正在编写一个应用程序来动画弹出窗口。它与我的代码配合得很好。

当按下设备上的后退按钮时,我想关闭弹出窗口(即向下滑动)。

但我听不到设备上的任何一个键。我使用setOnKeyListener了那个弹出窗口,我什至没有从中获取日志。

我的代码如下:

popup_layout = layoutInflater.inflate(R.layout.popup_addchannel, null);
            popupWindow = new PopupWindow(popup_layout, LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT);
subscribeButton.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View view) {

//                  Log.d(TAG,
//                          "Button is clicked for animation....  Visibility is"
//                                  + subscribeButton.getVisibility());
                    openMenu(view);
                }
            });
popup_layout.setOnKeyListener(new View.OnKeyListener() {

                @Override
                public boolean onKey(View v, int keyCode, KeyEvent event) {
                    Log.d(TAG, "on key button click called.........");
                    return false;
                }

            });

public void openMenu(View view) {
        if (!flag) {
            popupWindow.setAnimationStyle(R.style.PopupWindowAnimation);
            popupWindow.showAtLocation(view.findViewById(R.id.button1),
                    Gravity.CENTER, 0, 0);
            popupWindow.setFocusable(true);
            popupWindow.update();
            flag = true;
        } else {
            popupWindow.dismiss();
            popupWindow.setFocusable(false);
            flag = false;
        }
    }

这背后的问题是什么?

我能达到我的要求吗?

请指导我。

先感谢您!

4

6 回答 6

3

试试这个....

    final PopupWindow popupWindow = new PopupWindow(popupView,
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,true);
    ...
    popupWindow.getContentView().setFocusableInTouchMode(true);
    popupMenu.getContentView().setOnKeyListener(new View.OnKeyListener() {        
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode ==  KeyEvent.KEYCODE_MENU && 
                    event.getRepeatCount() == 0 && 
                    event.getAction() == KeyEvent.ACTION_DOWN) {
                // ... payload action here. e.g. popupMenu.dismiss();
                return true;
            }                
            return false;
        }
    });
于 2013-04-23T06:51:04.223 回答
1

该对话框具有取消后按对话框的属性。

dialog.setCancelable(true);

编辑:在此链接上检查 Qberticus 答案:Android 弹出窗口解除

您还可以看到:问题关闭弹出窗口

于 2013-04-23T05:56:52.453 回答
0

您应该覆盖您的活动的 onKeyPressed() 方法,如下所示。

@Override
public void onBackPressed() {
   super.onBackPressed();
   //your code to close the popup window.
   popupWindow.setAnimationStyle(R.style.PopupWindowAnimation);
   popupWindow.showAtLocation(view.findViewById(R.id.button1),
            Gravity.CENTER, 0, 0);
   opupWindow.setFocusable(true);
   popupWindow.update();
   flag = true;
}
于 2013-04-23T05:54:49.270 回答
0

是的,你可以使用这个 dialog_obj.setCancelable(true);

于 2013-04-23T06:11:29.413 回答
0
popupWindow.getContentView().setOnClickListener(new OnClickListener()) {

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        popupWindow.dismiss();
    }
});

试试这个。

于 2013-08-13T22:31:51.103 回答
0

您无法在弹出窗口中收听按键,但是当您收听系统返回键时,您可以覆盖dismiss()方法来拦截它。

于 2015-04-09T07:20:50.467 回答