关于Android4.0及以下系统版本使用PopupWindow.dismiss()时内部的Drawable透明的问题
来源:互联网 发布:ubuntu 终端输入中文 编辑:程序博客网 时间:2024/06/10 10:13
RT,这是android4.0及以下系统版本存在的一个bug,我原来的代码是(只写了真正影响该问题的代码,其他的对此不影响就不写了):
......
private PupopWindow window;
......
window = new PopupWindow(mContext);//此问题的关键之一
window.setContentView(layoutView);
window.setWidth(referView.getWidth());//用referView的宽度作为PopupWindow的宽度
window.setHeight(LinearLayout.LayoutParams.WRAP_CONTENT);
window.setBackgroundDrawable(getResources().getDrawable(R.drawable.spinner_bg_pop));//此问题的关键之二
window.setFocusable(true); //设置PopupWindow可获得焦点
window.setTouchable(true); //设置PopupWindow可触摸
window.setOutsideTouchable(true); //设置非PopupWindow区域可触摸
......
问题就出在我在初始化PopupWindow时使用的构造方法PopupWindow(Context context),然后再setContentView(View v)等其他PopupWindow的属性设置方法,
这个小问题困扰了老子两天,终于还是让我找到了这个问题所在,首先把上面的初始化PopupWindow的构造方法改为:
......
window = new PopupWindow(layoutView, referView.getWidth(),
LayoutParams.WRAP_CONTENT);
window.setBackgroundDrawable(null);
window.setFocusable(true); //设置PopupWindow可获得焦点
window.setTouchable(true); //设置PopupWindow可触摸
window.setOutsideTouchable(true); //设置非PopupWindow区域可触摸 现在此代码无效
.......
这一个三参数的构造方法后,然后再把设置背景的那句代码注掉,或者改为window.setBackgroundDrawable(null),问题立刻解决;
但是上面这样做又带来了一个新的问题,就是在触摸PopupWindow外的其他地方的时候,无法隐藏PopupWindow,解决这个问题的方法是,重写PopupWindow的contentView的onTouchListener方法如下(此处是从别的地方看到的http://www.oschina.net/question/195012_69287):
final View contentView = getContentView();//设置触摸事件contentView.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {final int x = (int) event.getX();final int y = (int) event.getY();if ((event.getAction() == MotionEvent.ACTION_DOWN)&& ((x < 0) || (x >= getWidth()) || (y < 0) || (y >= getHeight()))) {dismiss();return true;} else if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {dismiss();return true;} else {return contentView.onTouchEvent(event);}}});
这样的话问题算是真正解决了,即解决了点击PopupWindow中的控件背景变透明的问题,也解决了设置PopupWindow的背景为空时,setOutSideTouchable(true)无效的问题;
补充一句,android4.1上修复了这个bug!
- 关于Android4.0及以下系统版本使用PopupWindow.dismiss()时内部的Drawable透明的问题
- 关于popupwindow的dismiss问题
- 关于Android4.4及以下版本,TextView中使用矢量图时报错的问题
- 关于popupWindow的dismiss
- UIWebView在OS3.0及以下版本的透明问题
- PopupWindow的使用showAsDropDown()无法dismiss解决方法
- 支持Android4.0以下webp的使用
- 支持Android4.0以下webp的使用
- 支持Android4.0以下webp的使用
- 支持Android4.0以下webp的使用
- 支持Android4.0以下webp的使用
- 关于Android4.4以下版本Webview执行LoadUrl加载js导致键盘隐藏的问题(富文本编辑器)
- Android4.3及以下版本加载html源码错误问题
- android4.0+版本修改状态栏透明的调试
- android4.0+版本修改状态栏透明的调试
- 关于ProgressDialog不被dismiss的问题
- Xcode8 支持 iOS7及以下版本 中关于无法修改SDKSettings.plist文件的问题
- 关于android4.0系统周围红框的问题
- OpenCV学习笔记一(CvSeq的使用)
- springMVC ibatis 整合案例
- Android动画学习笔记
- 游戏编程推荐书籍
- 正在使用的 Google Chrome 扩展插件
- 关于Android4.0及以下系统版本使用PopupWindow.dismiss()时内部的Drawable透明的问题
- 针对ADT升级到17以上出现NoClassDefFoundError问题的解决办法
- poj 2060
- forecast过期问题
- 程序 'jps' 已包含在下列软件包中
- Google Chrome Extensions 最新精彩插件推荐
- 第002课 进制的算术运算(1)
- Bash Prompt -Linux 终端提示符
- javascript与c#之间的调用