如何获得屏幕宽度和高度
我试图使用以下代码来获取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);
查看演示源代码