我尝试使用以下代码来获取Android应用程序开发中的屏幕宽度和高度:
Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
但我在我的display
上遇到了NullPointerException,为什么?怎样获取屏幕的宽度和高度呢?
我尝试使用以下代码来获取Android应用程序开发中的屏幕宽度和高度:
Display display = getWindowManager().getDefaultDisplay();
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
但我在我的display
上遇到了NullPointerException,为什么?怎样获取屏幕的宽度和高度呢?
如果你在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);
getResources()
是Context
类上的一个抽象方法,因此您无法在没有上下文的情况下使用它。如果您在活动中,只需调用“getResources()
”即可;如果您在视图中,则可以使用“getContext()。getResources()
”。如果这些都不适用于您,并且您不想传递上下文,请参见此StackOverflow问题以获取备选解决方案。希望能对您有所帮助! - areyling在一个活动中,您可以调用:
int width = this.getResources().getDisplayMetrics().widthPixels;
int height = this.getResources().getDisplayMetrics().heightPixels;
当您在视图中时,首先需要获取上下文:
int width = getContext().getResources().getDisplayMetrics().widthPixels;
int height = getContext().getResources().getDisplayMetrics().heightPixels;
这将在所有 Android 版本中工作,可用自 API 1 起,且从未被弃用。
int width = getApplicationContext().getResources().getDisplayMetrics().widthPixels;
无法在视图内部工作。 - Oliver Hausler来自服务:
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;
getWindowManager().getDefaultDisplay()
,因为你无法保证它是否是当前的显示器。 - EpicPandaForce