package oschina.itheima.com.materialdemo; import android.content.Context; import android.graphics.drawable.BitmapDrawable; import android.view.LayoutInflater; import android.view.View; import android.widget.PopupWindow; /** * Created by Wang on 2017/5/22. */ public class SuperPopupWindow { private SuperPopupWindow() { } /** * * @param context 上下文 * @param layout 布局文件 * @param width pop的宽 * @param hight pop的高 * @param setOutsideTouchable 点击外部是否隐藏pop * @param setTouchable 设置PopupWindow是否响应touch事件 * @param setFocusable pop是否可以获取焦点(如果该PopupWindow是有焦点的,那么在它弹出来之后, * 所有的按键和触摸事件都会被它截获,包括返回键。这时候点击返回建会关闭pop。 * 而当它没有焦点时,点击返回键就会关闭它所在的activity或fragment。所以 * 当他没有焦点时,要想做掉点击返回键关闭它,你就要在activity或fragment中 * 重写onBackPressed()方法,手动设置关闭pop) * @return */ public static PopupWindow createPopupWindow(Context context,int layout,int width,int hight,boolean setOutsideTouchable,boolean setTouchable,boolean setFocusable){ View convertView = LayoutInflater.from(context).inflate(layout,null); final PopupWindow popupWindow = new PopupWindow(convertView, width, hight,true); popupWindow.setContentView(convertView); //这个函数可是吊了,这个函数不只能设置背景……,因为你加上它之后,setOutsideTouchable()才会生效; //而且,只有加上它之后,PopupWindow才会对手机的返回按钮有响应:即,点击手机返回按钮,可以关闭PopupWindow; // 如果不加setBackgroundDrawable()将关闭的PopupWindow所在的Activity. popupWindow.setBackgroundDrawable(new BitmapDrawable()); //设置点击外部可否关闭pop popupWindow.setOutsideTouchable(setOutsideTouchable); //设置PopupWindow是否响应touch事件,默认是true,如果设置为false,那么pop中的空间将不再永远点击事件,说白了,就是没法点了。 popupWindow.setTouchable(setTouchable); //该函数的意义表示,PopupWindow是否具有获取焦点的能力,默认为False。一般来讲是没有用的,因为普通的控件是不需要获取焦点的, // 而对于EditText则不同,如果不能获取焦点,那么EditText将是无法编辑的。 popupWindow.setFocusable(setFocusable); return popupWindow; } }
popupwindow工具类
最新推荐文章于 2022-08-24 15:31:20 发布