版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32216895/article/details/69941501
说明:相对于Dialog弹窗而言
Dialog弹窗的位置已经被限制在布局的中心,
而PopupWindow 则可以使弹窗布局加载到容器布局的任何地方(例如位于点击出现PopupWindow 控件的上、下、左、右方向,再通过偏移量使得布局加载到其他地方)
private PopupWindow popUpWindow;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);StorListener listener= new StorListener ();
setListener();// 设置监听return view;
}
/**
* 设置监听
*/
private boolean isShow = false;//设置默认为不显示状态
private void setListener() {
tvCheckClasstify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(isShow ==false){
isShow = true;
View view = View.inflate(MainActivity.this, R.layout.popwindons_classify_layout, null);
if (popUpWindow == null) {
popUpWindow=new PopupWindow(view,ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
Log.i("info", "new PopupWindow" + popUpWindow.toString());
// 显示布局、默认在下方
popUpWindow.showAsDropDown(tvCheckClasstify, 0, 0);
}
TextView tvNodel = (TextView) view.findViewById(R.id.tvNodel);
tvNodel.setOnClickListener(listener);
}else{
dismisPopWindons();
}
}
});
}
/**
* 初始化控件
*
* @param view
*/
private void initView(View view) {
tvCheckClasstify = (TextView) view.findViewById(R.id.tvCheckClasstify);
}
private class StorListener implements OnClickListener {
@Override
public void onClick(View v) {
// 关闭这个菜单/该方法只能关闭一次
// 如多次点击更多创建多余的对象
// 该多余的对象将会无法关闭,就会导致出现oom
switch (v.getId()) {
case R.id.tvNodel:
dismisPopWindons();
break;
default:
break;
}
}
}
/**
* 隐藏窗体
*/
private void dismisPopWindons() {
// TODO Auto-generated method stub
isShow = false;
popUpWindow.dismiss();
Log.i("info", "close PopupWindow" + popUpWindow.toString());
Toast.makeText(MainActivity.this, "测试关闭", 1000).show();
// 不置空下次将不能再进行创建
popUpWindow = null;
}
}