最近 項目中用到點擊“更多”彈出一個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; } });