获取实际屏幕高度(android)

问题描述:

我想获得运行我的应用程序的设备的实际屏幕高度。为了实现这一点,我尝试以下操作:获取实际屏幕高度(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是获得屏幕高度的不好方法吗?

看到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

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

我需要得到实际可用高度,进出的所有选项,这只是为我工作的事情。

创建一个矩形,并获得其尺寸:

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

其中activityRootView是布局的根视图。

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

int availableScreenHeight = screenHeight - toolbar.getHeight(); 

其中toolbar是您的工具栏视图。

availableScreenHeight现在没有状态栏,没有工具栏,也没有导航栏(如果设备正在使用它)。