獲取View類界面控件的位置,有助於添加新的控件。 html
這個比較簡單,不用多說,直接調用View的方法:getLeft , getTop, getBottom, getRight 得到。 數組
有一遍寫得不錯的文章,轉帖以下:(原文地址:http://www.fengfly.com/plus/view-209439-1.html) ide
======================================================================= post
咱們重點在獲取view的y座標,你懂的... spa
依次介紹如下四個方法: code
1.getLocationInWindow xml
int[] position = new int[2]; htm
textview.getLocationInWindow(position); 對象
System.out.println("getLocationInWindow:" + position[0] + "," + position[1]); 資源
這個方法是將view的左上角座標存入數組中.此座標是相對當前activity而言.
如果普通activity,則y座標爲可見的狀態欄高度+可見的標題欄高度+view左上角到標題欄底部的距離.
可見的意思是:在隱藏了狀態欄/標題欄的狀況下,它們的高度以0計算.
如果對話框式的activity,則y座標爲可見的標題欄高度+view到標題欄底部的距離.
此時是無視狀態欄的有無的.
2.getLocationOnScreen
int[] position = new int[2];
textview.getLocationOnScreen(position);
System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]);
這個方法跟上面的差很少,也是將view的左上角座標存入數組中.但此座標是相對整個屏幕而言.
y座標爲view左上角到屏幕頂部的距離.
3.getGlobalVisibleRect
Rect viewRect = new Rect();
textview.getGlobalVisibleRect(viewRect);
System.out.println(viewRect);
這個方法是構建一個Rect用來"套"這個view.此Rect的座標是相對當前activity而言.
如果普通activity,則Rect的top爲可見的狀態欄高度+可見的標題欄高度+Rect左上角到標題欄底部的距離.
如果對話框式的activity,則y座標爲Rect的top爲可見的標題欄高度+Rect左上角到標題欄底部的距離.
此時是無視狀態欄的有無的.
4.getLocalVisibleRect
Rect globeRect = new Rect();
button.getLocalVisibleRect(globeRect);
注意:
以上方法在OnCreate方法中調用,都會返回0,這是由於View還未加載完畢.
建議在onWindowFocusChanged方法中進行獲取,有些狀況下onWindowFocusChanged很差用的時候(好比ActivityGroup),能夠這樣寫:
mTextView.post(new Runnable() {
@Override
public void run() {
Rect viewRect = new Rect();
mTextView.getLocalVisibleRect(viewRect);
mTreeScrollView.setRect(viewRect);
}
});
這樣在View加載完畢以後會執行獲取位置的方法.
=======================================================================
PS:如何動態建立一個View類控件:
一、經過new方法來建立一個界面對象;
二、經過Layout xml資源來建立,利用LayoutInflater提供的方法。