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>