POP实战案例:
使得pop外有焦点,pop内也可以触发焦点:
//初始化pop窗口
popWindow = new PopupWindow(halfWidth + 50,
LayoutParams.MATCH_PARENT);// 这里注意不要写height高度,会造成最后一项显示不全
View contentView = setPopView();
contentView.setFocusableInTouchMode(true);//支持pop内焦点,支持pop外焦点(需要popWindow.setFocusable(true)属性),兼容性不好后面改造
popWindow.setContentView(contentView);
popWindow.setFocusable(true);
//popWindow.setBackgroundDrawable(new BitmapDrawable());
ColorDrawable cd = new ColorDrawable(R.color.gray);
popWindow.setBackgroundDrawable(cd);
注意:
1. 关于popWindow.setFocusable(true/false);的兼容性问题,部分手机对于pop是false时,点击pop内可以触发焦点,有些机型不可以触发焦点
2. 如果使用子类extends于PopupWindow,那么在实例化该子类时,子类没有相关的构造函数处理宽和高,则宽和高需要手动设置,如:this.setWidth(w / 2 + 50);
3. 在屏幕右上角处弹出,pop会全部展示在屏幕内
4. 关于pop宽度和高度,只要xml中子视图的父容器不是该xml的根容器,那么该父容器设置的具体数值大小有效,否则pop都是包裹效果。
(注意:上面的大小如果是match_parent或者wrap_content,最终结果还是包裹,DialogFragment也一样)
5. pop和dialog都不可被子类强转
6. 显示pop方法参考:
showAsDropDown(View anchor):相对某个控件的位置(正左下方),无偏移
showAsDropDown(View anchor, int xoff, int yoff):相对某个控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相对于父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以设置偏移或无偏移
7. pop更新窗体方法:pop.