pw.showAtLocation(rl_parent, Gravity.BOTTOM,0,0);
这一段代码可以使popupwindow点击外部消失,必须放在showatlocation才能起作用,点击外部消失,但不能使灰色背景色也消失。至于为什么加了这段代码点击外部会消失我也不清楚,希望知道的朋友留言告诉我。
WindowManager.LayoutParams lp=getWindow().getAttributes();
lp.alpha=0.3f;
getWindow().setAttributes(lp);
这段代码使屏幕背景变成灰色
pw.setOnDismissListener(new poponDismissListener());
添加消失监听事件
/**
* 添加新笔记时弹出的popWin关闭的事件,主要是为了将背景透明度改回来
* @author cg
*
*/
class poponDismissListener implements PopupWindow.OnDismissListener{
@Override
public void onDismiss() {
WindowManager.LayoutParams lp=getWindow().getAttributes();
lp.alpha=1f;
getWindow().setAttributes(lp);
}
}
还有一个重要的需要补充!:本activity的theme必须使用notitlebar
这是注册表中注册activity的
android:label="@string/app_name"
android:screenOrientation="portrait"
android:exported="true"
android:theme="@style/NoTitle" >
这是在stylt中定义notitle的
完整代码:
case R.id.tv_share_head: //点击分享按钮
pw = new PopupWindow(popshare, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
pw.setFocusable(true);
ColorDrawable dw = new ColorDrawable(-00000); //必须放在showatlocation才能起作用,点击外部消失,但不能使灰色背景色也消失
pw.setBackgroundDrawable(dw);
pw.showAtLocation(rl_parent, Gravity.BOTTOM,0,0);
WindowManager.LayoutParams lp=getWindow().getAttributes();
lp.alpha=0.3f;
getWindow().setAttributes(lp);
pw.setOutsideTouchable(true);
//添加pop窗口关闭事件
pw.setOnDismissListener(new poponDismissListener());
TextView cancel = (TextView)popshare.findViewById(R.id.tv_cancel);
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
WindowManager.LayoutParams lp=getWindow().getAttributes();
lp.alpha=1f;
getWindow().setAttributes(lp);
pw.dismiss();
}
});
break;
/**
* 添加新笔记时弹出的popWin关闭的事件,主要是为了将背景透明度改回来
* @author cg
*
*/
class poponDismissListener implements PopupWindow.OnDismissListener{
@Override
public void onDismiss() {
WindowManager.LayoutParams lp=getWindow().getAttributes();
lp.alpha=1f;
getWindow().setAttributes(lp);
}
}