2017-02-27 124 views
0

我知道一個觀點基本上只包含兩件事情,一個表示位置的x和y整數,但他們實際經過哪些單位?Android Point對象說明

我假設像素只是因爲當我使用顯示對象來獲取我的默認手機屏幕的大小並將其存儲在點對象(display.getSize(point))並記錄了我的點對象時,我得到(720, 1184)

它不能是DPS或類似的東西,因爲只有像素可以是那麼大。但是,當我嘗試將720px作爲隨機UI元素的寬度進行測試時,距離填充手機的整個寬度的距離大約縮短了40個像素。我也沒有填充這個活動。所以我想知道爲什麼當我的手機寬度比這個大一點時,它返回720px。

如果我確實有填充,那麼display.getSize()會考慮這個問題嗎?

回答

0

簡答題(S)

什麼單位?他們居然去了?

Point可以代表不同的東西,但在display.getSize()之後調用它是像素。

爲什麼當我的手機寬度比這個大一點時,它返回了720px。

填充,系統裝飾,兼容性問題,窗口管理器問題。您也可以從一個不同的答案:。

getApplicationContext().getSystemService(Context.WINDOW_SERVICE).getDefaultDisplay().getSize(point) 

getWindowManager()getSystemService(Context.WINDOW_SERVICE).getDefaultDisplay()的getSize()

而且這也可以,如果影響應用程序/設備正在以多窗口模式運行。

如果我確實有填充,會display.getSize()考慮到這一點?

是的。

較長答案:根據API docos

的應用程序顯示區域指定可 包含一個應用程序窗口,但不包括系統裝飾顯示器的一部分。應用程序顯示區域可能小於實際顯示區域,因爲系統會減去裝飾元素(如狀態欄)所需的空間。使用以下方法查詢應用程序顯示區域:getSize(Point),getRectSize(Rect)和getMetrics(DisplayMetrics)。

實際顯示區域指定包含 內容(包括系統裝飾)的顯示部分。即使如此,如果 窗口管理器正在使用(adb shell am display-size)模擬較小的顯示器,則真實顯示器 區域可能會小於顯示器的物理大小。使用以下方法查詢實際顯示 區域:getRealSize(Point),getRealMetrics(DisplayMetrics)。

所以最有可能要使用

getRealSize(Point); 

要獲得的空間量。至於你對Point單位的問題,我相信它實際上是像素。再次從the docos

空隙的getSize(點特大)

獲取顯示器的尺寸,以像素爲單位。

+0

非常感謝您的閃電般的快速回復,並對我的慢速回復感到抱歉。你的回答給出了一個非常透徹和易於理解的答案! –