我创建了一个Android应用程序,我在其中创建了一个弹出屏幕。但是当我按下后退按钮时,弹出窗口没有关闭。
我尝试过使用onBackPressed()。它不起作用。
有人可以告诉我该怎么做。
此致
香卡
答案 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
}
});