关于Android popupwindow弹窗 要求点击弹窗以外的地方时弹窗不关闭,点击back键时弹窗关闭

qq_27677559 2016-09-02 04:53:00
先上一个效果图

由于这个工程,几乎都是在同一个主界面操作,只是在不同的弹窗上操作数据,所以写了很多自定义PopupWindow
下面上一些主Activity的代码以及自定义弹窗的代码
自定义弹窗:

public class StartPopWindow extends PopupWindow {
Button btn_start = null;
private View conentView;
Context context;

public StartPopWindow(final Activity context) {
this.context = context;
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
conentView = inflater.inflate(R.layout.activity_popupwindow_start, null);
int h = context.getWindowManager().getDefaultDisplay().getHeight();
int w = context.getWindowManager().getDefaultDisplay().getWidth();
btn_start = (Button) conentView.findViewById(R.id.btn_start);
// 设置SelectPicPopupWindow的View
this.setContentView(conentView);
// 设置SelectPicPopupWindow弹出窗体的宽
this.setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置SelectPicPopupWindow弹出窗体的高
this.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
// 设置SelectPicPopupWindow弹出窗体可点击
this.setFocusable(false);
this.setOutsideTouchable(false);
// 刷新状态
// this.update();
// 实例化一个ColorDrawable颜色为半透明
//ColorDrawable dw = new ColorDrawable(0000000000);
// 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
this.setBackgroundDrawable(new BitmapDrawable());
// mPopupWindow.setAnimationStyle(android.R.style.Animation_Dialog);
// 设置SelectPicPopupWindow弹出窗体动画效果
this.setAnimationStyle(R.style.AnimationPreview);
}

public void showPopupWindow(final View parent) {
if (!this.isShowing()) {
int[] location = new int[2];
parent.getLocationOnScreen(location);
this.showAtLocation(parent, Gravity.NO_GRAVITY, location[0] + parent.getWidth(), location[1]);

btn_start.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
HouseNumberPopWindow houseNumberPopWindow = new HouseNumberPopWindow((Activity) context);
houseNumberPopWindow.showPopupWindow(parent);
Toast.makeText(conentView.getContext(), "1111", Toast.LENGTH_SHORT).show();
}
});
} else {
this.dismiss();
}
}
}


主Activity调用:

StartPopWindow startPopWindow = new StartPopWindow(UserLoginActivity.this);
startPopWindow.showPopupWindow(btn_regist);

就是传了个Activity和一个按钮控件, 按钮控件是来设置弹窗位置的

当弹窗不设置背景 这句代码时 this.setBackgroundDrawable(new BitmapDrawable());
不管是点击弹窗外面 还是 点击back按键 都不会关闭这个弹窗,
但是 当设置了这代码后,不管是点击弹窗外还是点击back键 都会关闭这个弹窗
我想点击弹窗外时 弹窗不消失,只有点击back时才关闭弹窗,而且不要影响弹窗内的一些操作事件。

求大神们来看看, 我对弹窗这方面不是很理解,求指点。。。。
...全文
862 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoveWyf_ 2016-09-03
  • 打赏
  • 举报
回复
2楼已经给出答案了
ceasernice 2016-09-03
  • 打赏
  • 举报
回复
setOutsideTouchable(false)
ink_s 2016-09-02
  • 打赏
  • 举报
回复
你不设背景 就是不要加 this.setBackgroundDrawable(new BitmapDrawable()); 这样实现了点击弹窗外时 弹窗不消失。 然后 你在监听返回按键 , @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { if(弹窗是显示的){关闭} } return false; }

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧