打开弹出窗口时如何监听键

时间:2013-04-23 05:52:19

标签: android back-button keylistener popupwindow

我正在编写一个应用程序来设置弹出窗口的动画。它与我的代码一起工作得很好。

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

但是我无法从设备上听任何一个键。我使用了弹出窗口的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;
        }
    }

这背后的问题是什么?

我能达到我的要求吗?

请指导我。

提前谢谢你!

6 个答案:

答案 0 :(得分: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;
        }
    });

答案 1 :(得分:1)

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

dialog.setCancelable(true);

编辑:在此链接上查看Qberticus答案:Android popup window dismissal

您还可以看到:Issue dismissing popup window

答案 2 :(得分: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;
}

答案 3 :(得分:0)

是的,你可以使用它 dialog_obj.setCancelable(真);

答案 4 :(得分:0)

popupWindow.getContentView().setOnClickListener(new OnClickListener()) {

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

试试这个。

答案 5 :(得分:0)

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