62

所以我有一个小问题,我正在编写一个需要将屏幕宽度发送到服务器的函数。我得到了一切工作,我使用:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();

获得宽度。但是 .getWidht() 函数已被弃用,它说你需要使用:

Point size = new Point();
display.getSize(size);

但该功能仅适用于 api 级别 13 或更高级别,而我的最低 sdk 为 8。那我该怎么办?如果我留在 getWidth 那里安全吗?为什么要添加新功能而不是使其向后兼容?

4

4 回答 4

128

可能这种方法会有所帮助:

DisplayMetrics displaymetrics = new DisplayMetrics();
mContext.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
int screenWidth = displaymetrics.widthPixels;
int screenHeight = displaymetrics.heightPixels;
于 2013-01-28T11:24:51.487 回答
11

您可以在运行时检查 API 级别,并选择使用哪个,例如:

final int version = android.os.Build.VERSION.SDK_INT;
final int width;
if (version >= 13)
{
    Point size = new Point();
    display.getSize(size);
    width = size.x;
}
else
{
    Display display = getWindowManager().getDefaultDisplay(); 
    width = display.getWidth();
}
于 2012-10-08T11:04:43.863 回答
4

如果您想正确,请使用以下方法:

int sdk = android.os.Build.VERSION.SDK_INT;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
} else {
    Point size = new Point();
    display.getSize(size);
}
于 2012-10-08T11:06:49.390 回答
3

这是没有弃用的最新代码。

科特林

 val metrics: DisplayMetrics = this.getResources().getDisplayMetrics()
 val width = metrics.widthPixels

爪哇

  DisplayMetrics metrics = context.getResources().getDisplayMetrics();
  int width = metrics.widthPixels;
  int height = metrics.heightPixels;
于 2021-08-24T11:59:51.300 回答