相對控件位置顯示:
上方顯示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
private
void
showPopUp(View v) {
LinearLayout layout =
new
LinearLayout(
this
);
layout.setBackgroundColor(Color.GRAY);
TextView tv =
new
TextView(
this
);
tv.setLayoutParams(
new
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
tv.setText(
"I'm a pop -----------------------------!"
);
tv.setTextColor(Color.WHITE);
layout.addView(tv);
popupWindow =
new
PopupWindow(layout,
120
,
120
);
popupWindow.setFocusable(
true
);
popupWindow.setOutsideTouchable(
true
);
popupWindow.setBackgroundDrawable(
new
BitmapDrawable());
int
[] location =
new
int
[
2
];
v.getLocationOnScreen(location);//得到相對當前控件的坐標位置
popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[
0
], location[
1
]-popupWindow.getHeight());
}
|
getLocationInWindow和getLocationOnScreen的區別
// location [0]--->x坐標,location [1]--->y坐標
int[] location = new int[2] ;
// 獲取在當前窗口內的絕對坐標,getLeft , getTop, getBottom, getRight, 這一組是獲取相對在它父窗口里的坐標。
view.getLocationInWindow(location);
// 獲取在整個屏幕內的絕對坐標,注意這個值是要從屏幕頂端算起,也就是包括了通知欄的高度,整個屏幕的大小坐標。
view.getLocationOnScreen(location);
如果在Activity的OnCreate()事件輸出那些參數,是全為0,要等UI控件都加載完了才能獲取到這些。
在onWindowFocusChanged(boolean hasFocus)中獲取為好。
View.getLocationInWindow()和 View.getLocationOnScreen()在window占據全部screen時,返回值相同,不同的典型情況是在Dialog中時。當Dialog出現在屏幕中間時,View.getLocationOnScreen()取得的值要比View.getLocationInWindow()取得的值要大。
注:screen:屏幕
下方
1
|
popupWindow.showAsDropDown(v);
|
左方
1
|
popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[
0
]-popupWindow.getWidth(), location[
1
]);
|
右方
1
|
popupWindow.showAtLocation(v, Gravity.NO_GRAVITY, location[
0
]+v.getWidth(), location[
1
]);
|
來源: <http://my.oschina.net/zhulunjun/blog/260859>
android:點擊popupwindow以外區域 popupwindow自動消失
方法一(這種方法可以處理popupwindows dimiss的時候一些其他的操作,比如讓其他控件的隱藏,消失等):
代碼如下popupWindow.setFocusable(false);//focusable要為false(不設置默認的就是False);
//這是Activity 的OnTouchEvent。OnTouchEvent代表的是Activity 獲得事件(即為PopupWindow之外)
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
if (popupWindow != null && popupWindow.isShowing()) {
popupWindow.dismiss();
popupWindow = null;
}
return super.onTouchEvent(event);
}
方法二:設置popupWindow參數(這種方法只能讓自身消失,不能夠提供其他伴隨操作,比如讓其他控件的隱藏,消失等)
pop = new PopupWindow(view, ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
pop.setBackgroundDrawable(new BitmapDrawable());//關鍵代碼
pop.setOutsideTouchable(true);