使用 PopupWindow 自定义对话框遭遇的悲催事件和解决方法
来源:互联网 发布:淘宝o2o平台 编辑:程序博客网 时间:2024/04/30 16:22
PopupWindow 类的构造方法有:
public RoundSelectPopupWindow() //据说在2.2的模拟器上会报错,为兼容性考虑建议不要使用public RoundSelectPopupWindow(Context context) public RoundSelectPopupWindow(Context context, AttributeSet attrs,int defStyleAttr, int defStyleRes) public RoundSelectPopupWindow(Context context, AttributeSet attrs,int defStyleAttr) public RoundSelectPopupWindow(Context context, AttributeSet attrs) public RoundSelectPopupWindow(int width, int height) public RoundSelectPopupWindow(View contentView) public RoundSelectPopupWindow(View contentView, int width, int height,boolean focusable) public RoundSelectPopupWindow(View contentView, int width, int height)
其中,
1、int width, int height 可以通过LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT 或LayoutParams.FILL_PARENT(已过时) 来设置为充满还是包裹内容。 (遭遇:…伤害999…看不见,看不见) 2、contentView 要设置为此 popupWindow 的布局文件。即 View contentView = findViewById( R.layout.xxx ); 假若此popupWindow 的全部内容其实是在布局文件的子布局中完成的,不建议使用 findViewById( R.id.xxx )的方式获取子布局,并设为contentView,否则可能导致自定义 popupWindow 失效或不显示。
(遭遇:…掉装惨重…做成demo移到其他项目居然就不灵光了)
3、popupWindow 设置获取焦点的资格,否则其可能无法响应进行监听事件popupWindow.setFocusable(true); // 设置PopupWindow可获得焦点popupWindow.setTouchable(true);// 设置PopupWindow可触摸
(遭遇:…掉蓝惨重…监听总是不成)
4、使用java代码设置背景,例如:popupWindow.setBackgroundDrawable(getWallpaper());//获取壁纸,实际上没有获取,只获得一片黑暗。
只使用xml在layout根节点设置背景,而不使用代码设置背景可能出现乱七八糟的问题。可能出现的问题是无法响应此popupWindow中定义的某些事件,或者无法设置全屏,屏幕的边框总是存在一两条空隙。
(遭遇…掉红惨重…无法设置真正全屏,通过java代码设置后成功,即便是设置透明度)
5、设置 popupWindow 可见。如:popupWindow.showAsDropDown(View view); 那么实例化后,popupWindow将在view的下方。
(遭遇:…智力下降…不能看到popupWindow)
6、监听 pupupWindow 中的控件时,使用类名直接实现 pupupWindow 的listener接口,即:public class RoundSelectPopupWindow extends PopupWindow implements OnClickListener{}无反应。可能原因,焦点问题;忘记在构造方法中设置监听:view.setOnClickListener(this);使用switch case判断view的id;使用if直接判断view == view。
(遭遇:…眩晕…监听无效,监听无效,删代码,删代码)
附图:
修复后代码:
PopupWindow popupWindow = new RoundSelectPopupWindow(MainActivity.this, contentView); popupWindow.setContentView(contentView); popupWindow.setWidth(LayoutParams.MATCH_PARENT); popupWindow.setHeight(LayoutParams.MATCH_PARENT); popupWindow.setBackgroundDrawable(new ColorDrawable(Color.alpha(50))); popupWindow.setFocusable(true); // 设置PopupWindow可获得焦点 popupWindow.setTouchable(true);// 设置PopupWindow可触摸 popupWindow.setOutsideTouchable(true);// popupWindow.showAsDropDown(titlebar); popupWindow.showAtLocation(titlebar,Gravity.CENTER,0, 0);
ok,正常。
0 0
- 使用 PopupWindow 自定义对话框遭遇的悲催事件和解决方法
- PopupWindow自定义对话框的使用技巧
- PopupWindow自定义对话框的使用技巧
- 自定义PopupWindow的监听事件
- 自定义PopupWindow的使用
- 自定义popupwindow和dialog的区别与使用
- Android自定义弹框Dialog和Popupwindow的封装使用
- [AS2.2]对话框+popupwindow的总结使用
- 使用自定义对话框和Activity对话框的区别
- 自定义弹窗对话框PopUpWindow
- 自定义弹窗对话框PopUpWindow
- PopupWindow的使用showAsDropDown()无法dismiss解决方法
- Android--从零单排系列(6)--相对应对话框popupwindow的优势和使用
- EditText和PopupWindow的事件冲突
- Android的自定义Menu使用PopupWindow实现
- 使用PopupWindow实现的自定义下拉列表
- 使用PopupWindow自定义的下拉框
- 自定义View之PopupWindow的使用
- 用柔性数组处理Pascal字符串内存块
- Caffe安装教程(Ubuntu15.04+CUDA7.5)
- Java连接mysql数据操作类
- tomcat 多实例部署
- ZZULIOJ 1793 有趣的球
- 使用 PopupWindow 自定义对话框遭遇的悲催事件和解决方法
- 利用遍历思想求解图问题(输出一些简单回路)
- 字符串匹配(一)——朴素算法,Rabin-Karp算法
- 【bzoj2982】combination
- eclipse没有(添加)”Dynamic Web Project”选项的方法
- Spring @Transactional 到底是怎么工作的?
- 30.自定义UITableViewCell第一章
- 《Linux命令、编辑器与Shell编程》读书笔记4.3-其他数据文件处理命令(tr,sort,cut,paste,join,uniq,split)
- 2015 CCPC Ancient Go