2013-10-27 43 views
0

我有一個TableLayout與單元格中的意見。當其中一個視圖被觸動時,我嘗試使用view.getTop()。問題是這是返回2無論我按哪個視圖。 getLeft()工程 - 它給我正確的值,但不getTop()getBottom()也以類似的方式表現,但返回122getTop()返回2爲TableLayout中的所有視圖

+0

這很正常,'getTop()'返回相對於父**的位置**,並且在其父項中,單元視圖從'TableRow'小部件的頂部開始(其中2最有可能是填充/邊距)。 – Luksprog

+0

@Luksprog我有一個6x6的網格,如http://stackoverflow.com/q/19604968/2442638中的截圖所示。那麼getLeft()爲什麼會爲每個點返回一個不同的值呢?有沒有辦法獲得y值? – RiThBo

回答

1

問題是這是返回2無論我按哪個視圖。

getTop/Left/Right/Bottom()方法是相對於親本,這意味着返回的值是相對於親本邊界(其成爲座標系的軸爲子視圖)。 TableLayout中的單元格視圖的父級爲TableRow。該TableRow的頂端轉換爲0 y值,通過在其中一個子項上調用getTop()返回。在你的情況下,這是2,因爲你可能在單元格視圖中設置了小的邊距/填充。

那麼爲什麼getLeft()爲每個點返回不同的值呢?

這裏沒有什麼特別的。 TableRow的左側轉換爲x值0,下一個孩子的x值爲0 +前一個孩子的寬度,依此類推。因爲你只有一個孩子朝那個方向看,所以你看不到這個高度。

下面是與此相關的方法View類的文檔小報價:

「這是可能通過調用方法getLeft()和共達()前檢索視圖的位置。返回表示視圖的矩形的左邊或X座標,後者返回表示視圖的矩形的頂部或Y座標,這兩個方法都返回視圖相對於其父視圖的位置,例如,當getLeft()返回20,這意味着該視圖位於其直接父級左邊緣右側20個像素。「

你可以使用的getLocationInScreen/Window方法中的一種,或者你可以用獲得的X父TableRowgetTop()值偏移細胞視圖的getTop()值,Y值相對於TableLayout部件。

+0

感謝您的好解釋和抵消'getTop()'值的想法。是什麼促使我問這個問題,是因爲在這個問題上與@blackbelt進行了對話:http://stackoverflow.com/q/19615721/2442638,其中我使用了'getLocationInScreen'方法,但值仍然是錯誤的。 – RiThBo

+0

@RiThBo該方法應該可以工作,但你可能面臨設備差異(尤其是如果你說如果在一個設備上的值是正確的)。 – Luksprog

+0

我做了一些更多的測試,並且該方法在任何設備上都無法正常工作,因爲當我更改填充或佈局的位置時,佈局顯然會移動,但是按下的點以及我試圖獲得的座標不匹配。 – RiThBo

相關問題