2013-11-22 105 views
2

我所瞭解的是getLocationOnScreen從屏幕角的最左上角返回Y軸上狀態欄(或操作欄或標題欄?)的高度增加的位置。getLocationInWindow和getLocationOnScreen之間的混淆

getLocationInWindow返回活動根內容視圖左上角的位置。

現在,一切似乎都有道理。但是,當Im試圖使用getLocationOnScreengetLocationInWindow來獲取位置時,它們都返回了一個按鈕的相同位置,並添加了狀態欄的高度。對於getLocationOnScreen這似乎是正確的,但對於getLocationInWindow它似乎是錯誤的。

有我丟失的東西?或其只是越野車?我在API-4和API-14中測試了這一點。

+0

可能重複的[getLocationOnScreen()vs getLocationInWindow()](http://stackoverflow.com/questions/17672891/getlocationonscreen-vs-getlocationinwindow) – stkent

回答

0

這個問題已經在這裏問了:getLocationOnScreen() vs getLocationInWindow()雖然接受的答案是不正確的,如@groucho所述。

我可以複製他的答案,但我認爲這是更好,如果你在那裏檢查!

+0

是的我意識到這一點,我發佈之前做了相當深入的搜索這裏。我不得不使用根視圖的活動,然後做了一些計算。 :) – xmen

1

儘管之前已經回答了這個問題,但我認爲仍然值得努力做出更清楚的解釋。

如果你看看getLocationOnScreen的代碼和getLocationInWindow:

public void getLocationOnScreen(int[] outLocation) { 
    // It calls the getLocationInWindow 
    getLocationInWindow(outLocation); 

    // and adjust accordingly in case the window is not the top-level window 
    final AttachInfo info = mAttachInfo; 
    if (info != null) { 
     outLocation[0] += info.mWindowLeft; // refer image below 
     outLocation[1] += info.mWindowTop; // refer image below 
    } 
} 

public void getLocationInWindow(int[] outLocation) { 
    // do my calculation here 
    // by traversing views contained in this window (in a single tree of views) 
    ... 
} 

這是下面的圖片,其中藍色表示屏幕&紅進一步解釋說明的窗口:

enter image description here

它需要注意的是,窗口可以是您的頂層窗口(覆蓋整個屏幕)或其他自定義窗口(如對話框)。

所以,回到你的問題:

getLocationOnScreen與狀態欄

這是正確的添加高度返回位置。手機的屏幕包括狀態欄查看

getLocationOnScreen和getLocationInWindow,他們都返回按鈕的相同位置與狀態欄的添加高度

那是因爲你正在使用的窗口是頂級可以覆蓋整個手機的屏幕。

相關問題