最近 项目中用到点击“更多”弹出一个Popuwindow,当点击外部区域是消失,点击更多按钮Popuwindow假如显示则隐藏,隐藏则显示,一开始设置了更多的点击事件,发现有问题,当window显示的时候正常它应该隐藏,结果却没有隐藏,因为当点击更多的时候首先走的是popuwindow的外部onTouch事件,这个时候popuwindow内部会将window个dismiss,解决办法如下:直接设置更多的OnTouch事件:核心的代码如下:
lin.getChildAt(lin.getChildCount() - 1).setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if(motionEvent.getAction()==MotionEvent.ACTION_DOWN){ Log.e("跟多", "进入了更多的onTouch()"); if(moreWindo==null) { moreWindo = new PopupWindow(MainActivity.this); View popView = layoutInflater.inflate(R.layout.more_two_dialog, null); /* ListView listView = (ListView) popView.findViewById(R.id.list); List<String> list = new ArrayList(); list.add("15分钟"); list.add("2小时"); list.add("周K"); list.add("月K");*/ //PixelUtil.dp2px(MainActivity.this,80 //listView.setAdapter(new ArrayAdapter<String>(MainActivity.this, R.layout.item_more_dialog, list)); // listView.setAdapter(new MoreAdapter(MainActivity.this)); moreWindo = new PopupWindow(popView, PixelUtil.dp2px(MainActivity.this, 80), WindowManager.LayoutParams.WRAP_CONTENT); moreWindo.setBackgroundDrawable(new ColorDrawable(0)); moreWindo.setContentView(popView); moreWindo.setOutsideTouchable(true); moreWindo.showAsDropDown(view, -30, ((int) view.getY() - 30)); }else{ if(moreWindo.isShowing()){ moreWindo.dismiss(); }else{ moreWindo.showAsDropDown(view, -30, ((int) view.getY() - 30)); } } } return true; } });