关闭Android弹出窗口,然后按下

时间:2011-08-04 10:54:26

标签: android

我创建了一个Android应用程序,我在其中创建了一个弹出屏幕。但是当我按下后退按钮时,弹出窗口没有关闭。

我尝试过使用onBackPressed()。它不起作用。

有人可以告诉我该怎么做。

此致

香卡

8 个答案:

答案 0 :(得分:38)

初始化后,您需要在PopupWindow上调用 setBackgroundDrawable 。类似的东西:

myPopup.setBackgroundDrawable(new BitmapDrawable());

答案 1 :(得分:4)

LayoutInflater layoutInflater = (LayoutInflater)MainActivity.this.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    View popupView = layoutInflater.inflate(R.layout.popup_window_country_list, null);
    countryPopup = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

    countryPopup.setBackgroundDrawable (new BitmapDrawable());

    countryPopup.setFocusable(true); //Make Here True For back press dismiss

    countryPopup.setOutsideTouchable(true); 

    countryPopup.setTouchInterceptor(new OnTouchListener() {

        public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {

                countryPopup.dismiss();


                return true;

            }

            return false;

        }
    });

答案 2 :(得分:4)

最近我使用了ListPopupWindow(android.support.v7.internal.widget.ListPopupWindow),当我打电话时,后退按钮开始工作

popupWindow.setModal(true);

无论我在setBackgroundDrawable方法中设置的是什么,其他解决方案都在这里假设。

答案 3 :(得分:3)

100%弹出窗口将在后退时解除。使用以下代码替换您的Popup代码

public void popup() {

    View popUpView_pur = getActivity().getLayoutInflater().inflate(R.layout.popup, null);
    PopupWindow popuplayout_pur = new PopupWindow(popUpView_pur, -1, -1, true);
    popuplayout_pur.setBackgroundDrawable(new BitmapDrawable());
    popuplayout_pur.setOutsideTouchable(true);
    popuplayout_pur.showAtLocation(popUpView_pur, 17, 0, 0);

}

<强>(或)

public void popup() {
    // TODO Auto-generated method stub
    LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View popupView = inflater.inflate(R.layout.popuplayout, null, false);

    PopupWindow pw = new PopupWindow(getActivity());
    pw.setWidth(WindowManager.LayoutParams.MATCH_PARENT);
    pw.setHeight(WindowManager.LayoutParams.MATCH_PARENT);

    pw.setTouchable(true);
    pw.setFocusable(true);
    pw.setOutsideTouchable(true);
    pw.setContentView(popupView);

    pw.showAtLocation(popupView, Gravity.CENTER, 0, 0);
}

答案 4 :(得分:2)

//here "popUp" is ref of PopupWindow

popUp.setBackgroundDrawable(new BitmapDrawable());// it is most important peace of code

// For Key Listeners

View v = popUp.getContentView();

//Here assigning the key Listners

    v.setOnKeyListener(this);

    @Override   
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        if(keyCode == KeyEvent.KEYCODE_BACK) popUp.dismiss();

        return false;

    }//Implements the KeyListener
     //and be careful we should implement "OnKeyListener"`

我希望它有用(我是新用户)

答案 5 :(得分:2)

以下代码工作正常。 因此,在您的活动中覆盖以下功能

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
     //Changes 'back' button action
    if(keyCode==KeyEvent.KEYCODE_BACK)
    {
        if(!popUpHelper.isPopupShowing()){
            onBackPressed();
        }else{
            popUpHelper.dismiss();
        }
    }

    return super.onKeyDown(keyCode, event);
}


class PopupHelper {
 PopupWindow popupWindowAttachment;
  public void initAndShow(Activity context,int mToolbarHeight){

   View layout = activity.getLayoutInflater().inflate(
            R.layout.activity_chat_attachment_popup, null);
    //create and show and Make sure popup window focusable should be false
    popupWindowAttachment = new PopupWindow(layout,
            ViewGroup.LayoutParams.MATCH_PARENT,
            ViewGroup.LayoutParams.WRAP_CONTENT);
    popupWindowAttachment.showAsDropDown(layout, 0, mToolbarHeight
            + (mToolbarHeight / 2) - 5);

  }

  public void dismiss() {
    if (isPopupShowing())
            popupWindowAttachment.dismiss();
  }
  public boolean isPopupShowing() {
    return popupWindowAttachment==null?false:popupWindowAttachment  
                 .isShowing();
  }
}

答案 6 :(得分:0)

按返回按钮通常会关闭弹出窗口。如果您需要在弹出窗口关闭时处理某些事情,可以使用

popupWindow.setOnDismissListener

注意:-我在科特林工作。对我有用

答案 7 :(得分:-1)

popup.setBackgroundDrawable(new BitmapDrawable());

popup.setOnDismissListener(new PopupWindow.OnDismissListener() {
            @Override
            public void onDismiss() {
                //do your code here
            }
        });