这篇文章主要介绍了PopupWindow在控件的各个方向上的显示(上、下、左、右),主要用到PopupWindow的showAtLocation()方法。
①.在控件上方、下方、左方、右方
布局中就放一个简单的按钮控件,居中,屏幕中间
//初始化控件
private void
init_Views() {
button
= (Button) findViewById(R.id.
popup
);
button
.setOnClickListener(
new
View.OnClickListener() {
@Override
public void
onClick(View v) {
//点击控件弹出窗口
popupWindwShowing(v);
}
});
}
//弹出窗口
private void
popupWindwShowing(View v) {
if
(
popupWindow
==
null
){
//初始化布局填充器
LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.
LAYOUT_INFLATER_SERVICE
);
//弹窗的布局
view
= layoutInflater.inflate(R.layout.
popupwindow
,
null
);
//popup初始化 参数:pop显示的view,pop的宽度,pop的高度
popupWindow
=
new
PopupWindow(
view
,
300
,
330
);
}
//使其聚集
popupWindow
.setFocusable(
true
);
//
设置允许点击外部消失
popupWindow
.setOutsideTouchable(
true
);
// 这个是为了点击“返回Back”也能使其消失,并且并不会影响你的背景
popupWindow
.setBackgroundDrawable(
new
BitmapDrawable());
//获得v在屏幕中的x 和 y坐标,记录在数组中
int
[] location =
new int
[
2
];
v.getLocationOnScreen(location);
WindowManager windowManager = (WindowManager) getSystemService(Context.
WINDOW_SERVICE
);
//坐标计算
int
pox = -(
popupWindow
.getWidth()/
2
-
button
.getWidth()/
2
);
//正下方 参数:点击的控件,偏离控件左下角点
// popupWindow.showAsDropDown(v,pox,0);
//上方
// popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0], location[1]-popupWindow.getHeight());
//左边
// popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[0]-popupWindow.getWidth(), location[1]);
//右边
popupWindow
.showAtLocation(v, Gravity.
NO_GRAVITY
, location[
0
]+v.getWidth(), location[
1
]);
}
效果图:
正下方:
上方:
左方:
右方: