如何获得屏幕宽度和高度

Lee*_*eem 53 android android-widget android-emulator android-layout android-activity

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

Display display = getWindowManager().getDefaultDisplay(); 
int screenWidth = display.getWidth();
int screenHeight = display.getHeight();
Run Code Online (Sandbox Code Playgroud)

但我得到的NullPointerException我的display,为什么呢?如何获得屏幕宽度和高度呢?

are*_*ing 127

如果您在Activity之外调用它,则需要传递上下文(或通过其他调用获取).然后使用它来获取显示指标:

DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
Run Code Online (Sandbox Code Playgroud)

更新:使用API​​级别17+,您可以使用getRealSize:

Point displaySize = new Point();
activity.getWindowManager().getDefaultDisplay().getRealSize(displaySize);
Run Code Online (Sandbox Code Playgroud)

如果需要可用的窗口大小,可以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);
Run Code Online (Sandbox Code Playgroud)

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

DisplayMetrics metrics = new DisplayMetrics();
activity.GetWindowManager().getDefaultDisplay().getRealMetrics(metrics);
Run Code Online (Sandbox Code Playgroud)


Khu*_*Sim 35

在活动中,您可以致电:

int width = this.getResources().getDisplayMetrics().widthPixels;
int height = this.getResources().getDisplayMetrics().heightPixels;
Run Code Online (Sandbox Code Playgroud)

当您在View中时,您需要首先获取Context:

int width = getApplicationContext().getResources().getDisplayMetrics().widthPixels;
int height = getApplicationContext().getResources().getDisplayMetrics().heightPixels;
Run Code Online (Sandbox Code Playgroud)

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


Mai*_*dul 18

来自服务:

Display  display= ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int width = display.getWidth(); 
int height = display.getHeight(); 
Run Code Online (Sandbox Code Playgroud)


小智 15

这最终对我有用:

DisplayMetrics metrics = this.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;
Run Code Online (Sandbox Code Playgroud)


MrJ*_*Jre 11

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


Hou*_*fly 7

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

int height = metrics.heightPixels;
int width = metrics.widthPixels;
Run Code Online (Sandbox Code Playgroud)

我想你写的代码已被弃用.