android應用程序中獲取view的位置

       獲取View類界面控件的位置,有助於添加新的控件。 html


  • 獲取在parent裏的相對座標位置

    這個比較簡單,不用多說,直接調用View的方法:getLeft , getTopgetBottomgetRight 得到。 數組

  • 取在屏幕中的絕對位置  
  1. getLocalVisibleRect
  2. getGlobalVisibleRect
  3. getLocationOnScreen
  4. getLocationInWindow

    有一遍寫得不錯的文章,轉帖以下:(原文地址:http://www.fengfly.com/plus/view-209439-1.html) ide

======================================================================= post

咱們重點在獲取view的y座標,你懂的... spa

依次介紹如下四個方法: code

 

1.getLocationInWindow xml

 

 
 
  1. int[] position = new int[2];  htm

  2. textview.getLocationInWindow(position);  對象

  3. System.out.println("getLocationInWindow:" + position[0] + "," + position[1]);  資源

 

這個方法是將view的左上角座標存入數組中.此座標是相對當前activity而言.

如果普通activity,則y座標爲可見的狀態欄高度+可見的標題欄高度+view左上角到標題欄底部的距離.

可見的意思是:在隱藏了狀態欄/標題欄的狀況下,它們的高度以0計算.

如果對話框式的activity,則y座標爲可見的標題欄高度+view到標題欄底部的距離.

此時是無視狀態欄的有無的.

 

2.getLocationOnScreen

 

 
 
  1. int[] position = new int[2]; 

  2. textview.getLocationOnScreen(position); 

  3. System.out.println("getLocationOnScreen:" + position[0] + "," + position[1]); 

 

這個方法跟上面的差很少,也是將view的左上角座標存入數組中.但此座標是相對整個屏幕而言.

 

y座標爲view左上角到屏幕頂部的距離.

 

 

3.getGlobalVisibleRect

 

 
 
  1. Rect viewRect = new Rect(); 

  2. textview.getGlobalVisibleRect(viewRect); 

  3. System.out.println(viewRect); 

 

這個方法是構建一個Rect用來"套"這個view.此Rect的座標是相對當前activity而言.

如果普通activity,則Rect的top爲可見的狀態欄高度+可見的標題欄高度+Rect左上角到標題欄底部的距離.

如果對話框式的activity,則y座標爲Rect的top爲可見的標題欄高度+Rect左上角到標題欄底部的距離.

此時是無視狀態欄的有無的.

 

4.getLocalVisibleRect

 

 
 
  1. Rect globeRect = new Rect(); 

  2. button.getLocalVisibleRect(globeRect); 

 



注意:

以上方法在OnCreate方法中調用,都會返回0,這是由於View還未加載完畢.

建議在onWindowFocusChanged方法中進行獲取,有些狀況下onWindowFocusChanged很差用的時候(好比ActivityGroup),能夠這樣寫:

 

 
 
  1. mTextView.post(new Runnable() { 

  2.     @Override 

  3.     public void run() { 

  4.         Rect viewRect = new Rect(); 

  5.         mTextView.getLocalVisibleRect(viewRect); 

  6.         mTreeScrollView.setRect(viewRect); 

  7.     } 

  8. }); 

 

這樣在View加載完畢以後會執行獲取位置的方法.

=======================================================================


PS:如何動態建立一個View類控件:

    一、經過new方法來建立一個界面對象;

    二、經過Layout xml資源來建立,利用LayoutInflater提供的方法。

相關文章
相關標籤/搜索