2016-07-23 30 views
2

我試圖獲取設備的像素寬度/高度用於放置元件和映射的觸摸事件在屏幕上,但沒有得到所期望的效果(注意右下方應該是完全的Android getDisplayMetrics()沒有返回準確的顯示尺寸

White square should be flush in the lower right corner

// screen size 
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics(); 
    float ScrDensity = metrics.density; 
    int metricHeight = metrics.heightPixels;// 
    int metricWidth = metrics.widthPixels;// 

    Log.i("AllMetrics", metrics.toString()); 

    // temp 
    int rightButton_diameter = 100; 
    int rightButton_xpos = metricWidth - rightButton_diameter; 
    int rightButton_ypos = metricHeight - rightButton_diameter; 

其中AllMetrics返回:

DisplayMetrics{density=2.0, width=720, height=1184, scaledDensity=2.0, xdpi=320.0, ydpi=320.0} 

我注意到,換貨政右底部)齊平rned高度也從在虛擬設備管理器(API 19,機器人4.4)和觸摸事件的X/Y位置列出的720x1280不同似乎精確到繪製的元素(即按鈕的點擊區域是一樣的,其中它被畫)

這是一個配置錯誤或正在使用獲取屏幕位置的不正確的方法嗎?

+1

高度= 1184,因爲它不包括狀態欄的高度是96,這兩個數字加在一起給1280是物理屏幕高度 – pskink

+0

BTW究竟你想達到什麼目的? – pskink

+0

只需準確地將東西放置在屏幕上爲初學者。 我注意到,如果我從0,0開始繪製,它與左上角齊平。狀態欄不應該抵消69?否則,它只是缺少底部而不是頂部的高度。 – Gavin

回答

2

檢查這個代碼工作對我來說

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 
int width = dm.widthPixels; 
int height = dm.heightPixels; 

活動之外,你可以試試這個

((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm) 
+1

我的理解是getWindowManager()不能在主Activity之外使用嗎? (事實上​​返回「無法解析法」,當我嘗試使用它),如果我錯了 道歉。這是我第一次進入Android開發。 – Gavin

+1

如果你想使用外部活動的傳遞活動的上下文...祝你好運。 –

+0

然後只是作爲主要活動上下文的方法進行訪問嗎?使用: this.mainActivityContext.getWindowManager()。getDefaultDisplay()。getMetrics(dm);返回相同的問題,getWindowManager()未解決。 – Gavin

0

要訪問DisplayMetrics成員初始化一個對象是這樣的:

DisplayMetrics metrics = new DisplayMetrics(); getWindowManager()。getDefaultDisplay()。getMetrics(metrics);

+1

這在主Activity之外不起作用。 – Gavin