popupwindow里有个listview,listview的item里有CheckBox,导致listview点击无效

解决办法其实很简单,把CheckBox的布局文件里加上这句话

android:focusable="false"

完美解决


想让popupwindow点击外部不消失:

如果设置popupWindow的setFocusable( true ),那么设置setOutsideTouchable ( false )是没有作用的,点击区域外依然会dismiss。

当设置popupWindow的setFocusable( false ),那么设置setOutsideTouchable ( true ) 时,点击区域外会dismiss,setOutsideTouchable 终于起作用了。也就是mOutsideTouchable只有在mFocusable为false的时候才有作用。

当设置popupWindow的setFocusable( false ),设置setOutsideTouchable ( false ) 时会有什么效果呢?答案是popupWindow是不会dismiss的,但是区域外的点击事件已经传递到popupwindow下面的activity了,点击activity下面的控件会有作用的。这就坑爹了,点击区域外不消失的效果是做到了,可是点击区域外,也就是popupWindow下面的activity的控件例如button时会响应onClickListener的。那该怎么使activity不分发popupWindow区域外的点击事件呢?

activity中有两个重要的处理事件的方法dispatchTouchEvent和onTouchEvent。在这里主要是利用了 dispatchTouchEvent。

那我们就重写activity中dispatchTouchEvent,在里面判断popupWindow是否显示来决定是否往下分发事件。

@Overridepublic boolean dispatchTouchEvent(MotionEvent event){        if(mPopupWindow!=null&&mPopupWindow.isShowing()){            return false;        }        return super.dispatchTouchEvent(event);    }
popupWindow的设置:
mPopupWindow=new PopupWindow(selectView, ViewGroup.LayoutParams.MATCH_PARENT,                ViewGroup.LayoutParams.WRAP_CONTENT,true);mPopupWindow.setFocusable(false);mPopupWindow.setOutsideTouchable(false);mPopupWindow.showAtLocation(findViewById(R.id.EditActivity_rootView), Gravity.BOTTOM,0,0);
OK,大功告成。现在点击popupWindow区域外终于不会使popupWindow dismiss了,也不会使下面的activity控件得到响应了

更多相关文章

  1. android使用百度地图SDK获取定位信息示例
  2. android 打造可复用的底部dialog
  3. android 控件: xml 设置 Button 按下背景
  4. android编译分析之10—config.mk
  5. Cordova Android(安卓)返回键拦截(backbutton)和退出(再点击一次跳
  6. 使用WindowManager实现Android悬浮窗
  7. 使用eclipse编写并运行你的第一个Android程序
  8. Android(安卓)studio打包生成apk
  9. android中实现“再按一次退出”功能

随机推荐

  1. 利用Handler来更新android的UI (2)
  2. android 模拟器中启用相机API支持
  3. android 自定义对话框
  4. 2月11日学习日志
  5. List 去除一些默认设置
  6. android(2)
  7. Netroid:强大、快速、易用、可扩展基于Vo
  8. 使用Repo在Windows平台下載Android原始碼
  9. android API1.6--2.1变更摘要
  10. Android反射机制实例