2016-03-03 127 views
8

我想獲得運行我的應用程序的設備的實際屏幕高度。爲了實現這一點,我嘗試以下操作:獲取實際屏幕高度(android)

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

     int Height = metrics.heightPixels; 
     TextView HeightView = (TextView) findViewById(R.id.screenHeight); 
     HeightView.setText("Screen Height: " + Height); 

     int Width = metrics.widthPixels; 
     TextView WidthView = (TextView) findViewById(R.id.screenWidth); 
     WidthView.setText("Screen Width: " + Width); 

,我運行使用仿真器具有1080個像素的屏幕寬度和1920個像素的屏幕高度的裝置。寬度顯示正確(1080像素),但高度根據應用程序只有1776像素。我需要什麼讓我的應用程序顯示正確的屏幕高度? metrics.heightPixels是獲得屏幕高度的不好方法嗎?

回答

20

看到this答案

如果你的API等級> 13試試這個,如果你在活動

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

如果您在活動不是您可以通過WINDOW_SERVICE得到默認顯示:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 

getWidth和getHeight用於API級別13或更低

UPDATE

對於API 17和更高的方法Display.getRealSize()返回屏幕的全尺寸,如所提到in documentation

獲取顯示 的實際尺寸未減去任何窗口裝飾或施加任何兼容性 規模因素。

尺寸根據顯示屏的當前旋轉進行調整。

當窗口管理器正在模擬較小的顯示(使用adb shell am display-size)時,實際大小可能小於屏幕的物理大小 。

+1

非建議您的建議根據需要。 – lxknvlk

4
int width=Resources.getSystem().getDisplayMetrics().widthPixels; 
int height=Resources.getSystem().getDisplayMetrics().heightPixels; 
3

我需要得到實際可用高度,進出的所有選項,這只是爲我工作的事情。

創建一個矩形,並獲得其尺寸:

Rect r = new Rect(); 
activityRootView.getWindowVisibleDisplayFrame(r); 
int screenHeight = r.bottom - r.top; 

其中activityRootView是佈局的根視圖。

如果你需要提取工具欄高度:

int availableScreenHeight = screenHeight - toolbar.getHeight(); 

其中toolbar是您的工具欄視圖。

availableScreenHeight現在沒有狀態欄,沒有工具欄,也沒有導航欄(如果設備正在使用它)。