又是一张毫不相关的图
前言
在日常的开发中,经常会有弹框的操作。实现弹框有两种选,PopupWindow或者Dialog,这里就先忽略Dialog。弹框可能会在各种位置出现,在指定View的上、下、左、右、左对齐、右对齐等...
而PopupWindow似乎就提供了showAsDropDown方法(请忽略showAtLocation,这边说的是相对于View显示),这~~就有点尴尬了。
PopupWindow
平时我们可能是这样用PopupWindow的:创建一个布局,再创建一个类继承PopupWindowpublic class TestPopupWindow extends PopupWindow {
public TestPopupWindow(Context context) {
super(context);
setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
setWidth(ViewGroup.LayoutParams.WRAP_CONTENT);
setOutsideTouchable(true);
setFocusable(true);
setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
View contentView = LayoutInflater.from(context).inflate(R.layout.popup_test,
null, false);
setContentView(contentView);
}
}然后直接使用它TestPopupWindow mWindow = new TestPopupWindow(this);
//根据指定View定位
PopupWindowCompat.showAsDropDown(mWindow, mButtom, 0, 0, Gravity.START);
//或者
mWindow.showAsDropDown(...);
//又或者使用showAtLocation根据屏幕来定位
mWindow.showAtLocation(...);
Gravity.LEFT(Gravity.START):相对于View左对齐;
Gravity.RIGHT(Gravity.END):相对于View靠右显示。Gravity.CENTER:在showAsDropDown()中是跟 Gravity.LEFT一样,在showAtLocation()中Gravity.CENTER才有效果得到效果
left.gif
查了下showAsDropDown(),发现只能在指定控件的下面弹出,总感觉少了点什么~~
有时候我想弹在View的上面、左边、右边?怎么解?
尬
可能有机智的boy已经想到了showAsDropDown()中的另外两个参数,xoff、yoff。要利用这两个参数,不过不建议在代码中直接写。为什么?
如果你的PopupWindow宽高不