如何获得屏幕宽度和高度

我试图使用以下代码来获取Android应用程序开发中的屏幕宽度和高度:

Display display = getWindowManager().getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); 

但是我得到了NullPointerExceptionexception ,为什么? 如何获得屏幕宽度和高度呢?

如果你在一个Activity之外调用这个,你需要传递上下文(或者通过一些其他的调用)。 然后使用它来获得您的显示指标:

 DisplayMetrics metrics = context.getResources().getDisplayMetrics(); int width = metrics.widthPixels; int height = metrics.heightPixels; 

更新:API等级17+,你可以使用getRealSize

 Point displaySize = new Point(); activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize); 

如果您需要可用的窗口大小,则可以使用getDecorView通过从实际显示大小中减去装饰视图大小来计算可用区域:

 Point displaySize = new Point(); activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize); Rect windowSize = new Rect(); ctivity.getWindow().getDecorView().getWindowVisibleDisplayFrame(windowSize); int width = displaySize.x - Math.abs(windowSize.width()); int height = displaySize.y - Math.abs(windowSize.height()); return new Point(width, height); 

getRealMetrics也可能工作(要求API级别17+),但我还没有尝试过:

 DisplayMetrics metrics = new DisplayMetrics(); activity.GetWindowManager().getDefaultDisplay().getRealMetrics(metrics); 

在一个活动中,你可以打电话给:

 int width = this.getResources().getDisplayMetrics().widthPixels; int height = this.getResources().getDisplayMetrics().heightPixels; 

当你在一个视图中,你需要首先获取上下文:

 int width = getApplicationContext().getResources().getDisplayMetrics().widthPixels; int height = getApplicationContext().getResources().getDisplayMetrics().heightPixels; 

这将适用于所有Android版本,从API 1起可用,并且从不弃用。

从服务:

 Display display= ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 

这是最后为我工作的:

 DisplayMetrics metrics = this.getResources().getDisplayMetrics(); int width = metrics.widthPixels; int height = metrics.heightPixels; 

如果您有可用的上下文,请通过context.getResources().getDisplayMetrics()尝试。

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

我猜你写的代码已被弃用。

 if (Build.VERSION.SDK_INT >= 11) { Point size = new Point(); try { this.getWindowManager().getDefaultDisplay().getRealSize(size); screenWidth = size.x; screenHeight = size.y; } catch (NoSuchMethodError e) { screenHeight = this.getWindowManager().getDefaultDisplay().getHeight(); screenWidth=this.getWindowManager().getDefaultDisplay().getWidth(); } } else { DisplayMetrics metrics = new DisplayMetrics(); this.getWindowManager().getDefaultDisplay().getMetrics(metrics); screenWidth = metrics.widthPixels; screenHeight = metrics.heightPixels; } 

尝试使用下面的代码来获得屏幕的宽度和高度

 int widthOfscreen =0; int heightOfScreen = 0; DisplayMetrics dm = new DisplayMetrics(); try { ((Activity) context).getWindowManager().getDefaultDisplay() .getMetrics(dm); } catch (Exception ex) { } widthOfscreen = dm.widthPixels; heightOfScreen = dm.heightPixels; 
 WindowManager w = getWindowManager(); Display d = w.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); d.getMetrics(metrics); Log.d("WIDTH: ", String.valueOf(d.getWidth())); Log.d("HEIGHT: ", String.valueOf(d.getHeight())); 
  /* *DisplayMetrics: A structure describing general information about a display, such as its size, density, and font scaling. * */ DisplayMetrics metrics = getResources().getDisplayMetrics(); int DeviceTotalWidth = metrics.widthPixels; int DeviceTotalHeight = metrics.heightPixels; 
  int scrWidth = getWindowManager().getDefaultDisplay().getWidth(); int scrHeight = getWindowManager().getDefaultDisplay().getHeight(); 
 Display display = getActivity().getWindowManager().getDefaultDisplay(); int screenWidth = display.getWidth(); int screenHeight = display.getHeight(); Log.d("Tag", "Getting Width >> " + screenWidth); Log.d("Tag", "Getting Height >> " + screenHeight); 

这在我的应用程序中正常工作

使用function的替代方法

 private int[] getScreenSIze(){ DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int h = displaymetrics.heightPixels; int w = displaymetrics.widthPixels; int[] size={w,h}; return size; } 

点击button或在你的创buildfunction添加下面的代码

 int[] screenSize= getScreenSIze(); int width=screenSize[0]; int height=screenSize[1]; screenSizes.setText("Phone Screen sizes \n\n width = "+width+" \n Height = "+height); 

查看演示源代码