I have created a android application where I have created a popup screen. But when I am pressing the back button, popup is not getting closed.
I have tried with onB
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;
}
});
The popup window normally closes when you press the back button. if you need to handle certain things when the popup closes, you can use
popupWindow.setOnDismissListener
Note:- I worked in kotlin. It worked for me
popup.setBackgroundDrawable(new BitmapDrawable());
popup.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
//do your code here
}
});
What you need to do is call setBackgroundDrawable on your PopupWindow after you initialize it. Something like:
myPopup.setBackgroundDrawable(new BitmapDrawable());
Following code is working perfectly. So override following function in your activity
@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();
}
}
Recently I worked with ListPopupWindow (android.support.v7.internal.widget.ListPopupWindow
) and back button started to work when I called
popupWindow.setModal(true);
no matter what I set in setBackgroundDrawable
method as other solutions suppose here.