Android轮子弹窗工具

package leap.mes.work.foreground_extrusion.Utils; import android.app.Activity; import android.content.Context; import android.content.DialogInterface; import android.graphics.Point; import android.graphics.drawable.ColorDrawable; import android.support.v7.app.AlertDialog; import android.view.Display; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.TextView; import java.util.ArrayList; import java.util.List; import leap.mes.work.foreground_extrusion.R; import leap.mes.work.foreground_extrusion.Utils.PopwindowView.PopwindowViews; import static leap.mes.work.foreground_extrusion.Utils.Utils.setBackgroundAlpha; public class PopWindowUtils { private View view; private PopwindowViews popWindow; private AlertDialog alert = null; private AlertDialog.Builder builder = null; private PopWindowUtils.OnItemClickListener mOnItemClickListener; public interface OnItemClickListener { void onItemClick(AlertDialog alertDialog,int viewtype); void onItemLongClick(View view, int position);
    } public  void showPopupWindow(final Activity activity, int layout,int width,int hight,int animationStyle,boolean touchable){ view = LayoutInflater.from(activity).inflate(layout, null, false); //1.构造一个PopupWindow,参数依次是加载的View,宽高  popWindow = new PopwindowViews(view,
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); if(width!=0){ popWindow.setWidth(width);
        } if(hight!=0){ popWindow.setHeight(hight);
        } popWindow.setAnimationStyle(animationStyle); //设置加载动画   //这些为了点击非PopupWindow区域,PopupWindow会消失的,如果没有下面的  //代码的话,你会发现,当你把PopupWindow显示出来了,无论你按多少次后退键  //PopupWindow并不会关闭,而且退不出程序,加上下述代码可以解决这个问题  if(touchable){//点击外部可以消失,否则不消失并可以输入edittext  popWindow.setTouchable(true); popWindow.setTouchInterceptor(new View.OnTouchListener() { @Override  public boolean onTouch(View v, MotionEvent event) { return false; // 这里如果返回true的话,touch事件将被拦截  // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss  }
            });
        }else { popWindow.setOutsideTouchable(false); popWindow.setFocusable(true); popWindow.setEditDismiss(false);
        } popWindow.setOnDismissListener(new PopwindowViews.OnDismissListener() { @Override  public void onDismiss() { // pop.dismiss()方法调用时,回调该函数,点击外部时,也会回调该函数  setBackgroundAlpha(activity, 1.0f);//背景光亮  }
        }); popWindow.setBackgroundDrawable(new ColorDrawable(0x00000000)); //要为popWindow设置一个背景才有效    //设置popupWindow显示的位置,参数依次是参照View,x轴的偏移量,y轴的偏移量   this.popWindow = popWindow;
    } /**  * 获取屏幕高度  * @param activity  * @return  */  public List<Integer> getWidthandHight(Activity activity){
        List<Integer> screen = new ArrayList<>();
        Display display = activity.getWindowManager().getDefaultDisplay();
        Point outSize = new Point();
        display.getSize(outSize);//不能省略,必须有  int screenWidth = outSize.x;//得到屏幕的宽度  int screenHeight = outSize.y;//得到屏幕的高度  screen.add(screenWidth);//0是宽  screen.add(screenHeight);//1是高  return screen;
    } /**  * 获取弹出当前悬浮框的布局view  * @return  */  public View getLayoutView(){ return view;
    } /**  * 获取当前弹出的悬浮框对象  * @return  */  public PopwindowViews getPopupWindow(){ return this.popWindow;
    } /**  * 获取当前弹出的悬浮框对象  * @return  */  public PopwindowViews PopupWindowshowGravity(Activity activity, View v, int gravity){ if(gravity==0){ popWindow.showAsDropDown(v, 0, 0);
        }else { popWindow.showAtLocation(v, gravity,0,0);
        } setBackgroundAlpha(activity, 0.7f);//背景调暗  return this.popWindow;
    } /**  *  * @param activity  * @param layout 弹出窗布局  * @param width 宽度  * @param hight 长度  * @param v 参照物  * @param gravity 位置  * @param animationStyle 动画  * @param msg_id 内容id  * @param error_id 提示id  * @param errortip 错误提示  * @param msg 内容  * @return  */  //new PopWindowUtils().PopupWindowshowGravity(Extrusionmain1_Activity.this, R.layout.error_popwindow_item, 0, 0,extrusionmain_activity_rl, Gravity.CENTER, R.anim.anim_pop, R.id.error_popwindow_item_msg_tv, R.id.error_popwindow_item_error_tv, R.id.error_popwindow_item_error_btn,"机台资源数据提示",machRSData_entity.getMsg());   public PopwindowViews PopupWindowshowGravity(final Activity activity, int layout, int width, int hight, View v, int gravity, int animationStyle, int msg_id, int error_id, int error_btnid, String errortip, String msg){ view = LayoutInflater.from(activity).inflate(layout, null, false);
        TextView msg_tv = (TextView)view.findViewById(msg_id);
        TextView error_tv = (TextView)view.findViewById(error_id);
        Button error_btn =(Button)view.findViewById(error_btnid); //1.构造一个PopupWindow,参数依次是加载的View,宽高  popWindow = new PopwindowViews(view,
                ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, true); if(width!=0){ popWindow.setWidth(width);
        } if(hight!=0){ popWindow.setHeight(hight);
        } popWindow.setAnimationStyle(animationStyle); //设置加载动画   //这些为了点击非PopupWindow区域,PopupWindow会消失的,如果没有下面的  //代码的话,你会发现,当你把PopupWindow显示出来了,无论你按多少次后退键  //PopupWindow并不会关闭,而且退不出程序,加上下述代码可以解决这个问题  popWindow.setTouchable(true); popWindow.setTouchInterceptor(new View.OnTouchListener() { @Override  public boolean onTouch(View v, MotionEvent event) { return false; // 这里如果返回true的话,touch事件将被拦截  // 拦截后 PopupWindow的onTouchEvent不被调用,这样点击外部区域无法dismiss  }
        }); popWindow.setOnDismissListener(new PopwindowViews.OnDismissListener() { @Override  public void onDismiss() { // pop.dismiss()方法调用时,回调该函数,点击外部时,也会回调该函数  setBackgroundAlpha(activity, 1.0f);//背景光亮  }
        }); popWindow.setBackgroundDrawable(new ColorDrawable(0x00000000)); //要为popWindow设置一个背景才有效    //设置popupWindow显示的位置,参数依次是参照View,x轴的偏移量,y轴的偏移量  if(gravity==0){ popWindow.showAsDropDown(v, 0, 0);
        }else { popWindow.showAtLocation(v, gravity,0,0);
        } setBackgroundAlpha(activity, 0.7f);//背景调暗   this.popWindow = popWindow;
        msg_tv.setText(msg);
        error_tv.setText(errortip);
        error_btn.setOnClickListener(new View.OnClickListener() { @Override  public void onClick(View v) { popWindow.dismiss();
            }
        }); return this.popWindow;
    } public void AlertDialogUtils(final Context mContext, String title, String message, final PopWindowUtils.OnItemClickListener mOnItemClickLitsener){ alert = null; builder = new AlertDialog.Builder(mContext); alert = builder.setIcon(R.drawable.warning_dc4042_48_icon)
                .setTitle(title)
                .setMessage(message)
                .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override  public void onClick(DialogInterface dialog, int which) { mOnItemClickLitsener.onItemClick(alert,0);
                    }
                })
                .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override  public void onClick(DialogInterface dialog, int which) { mOnItemClickLitsener.onItemClick(alert,1);
                    }
                }).create(); //                .setNeutralButton("确定", new DialogInterface.OnClickListener() { //                    @Override //                    public void onClick(DialogInterface dialog, int which) { //                        Toast.makeText(mContext, "你点击了中立按钮~", Toast.LENGTH_SHORT).show(); //                    } //                })          //创建AlertDialog对象  alert.show(); //显示对话框  }

}

package leap.mes.work.foreground_extrusion.Utils.PopwindowView; import android.view.View; import android.widget.PopupWindow; /**  * 悬浮窗可以编辑而点空白不消失  */ public class PopwindowViews extends PopupWindow { public boolean isDismiss=true; public PopwindowViews(){
    } public PopwindowViews(View contentView, int width, int height, boolean focusable){ super(contentView,width,height,focusable);
    } @Override  public void dismiss() { if(isDismiss)super.dismiss();
    } public void close(){ super.dismiss();
    } public void setEditDismiss(boolean is){ isDismiss = is;
    }
}
调用方式:
popWindowUtils1.showPopupWindow(mfgJiyaHdList_Activity.this, R.layout.workshopexecution_function_title_item1_popwindow, 0, 0, R.anim.anim_pop, true);
R.anim.anim_pop是如下内容xml文件
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android">
    <alpha android:fromAlpha="0"  android:toAlpha="1"  android:duration="2000">
    </alpha>
</set>