Android获取屏幕尺寸已弃用?

Ukj*_*ent 14 size android deprecated

嘿我需要在我的应用程序中获得屏幕的宽度.该应用程序将在2.1及更高版本上运行.我已将其设置为如下所示.该方法已弃用,我应该可以使用getSize或其他方式.但问题是:这适用于3.0+和4.0+等Android版本,还是会让应用程序崩溃.我之前在线程中使用了一个弃用的方法,它使应用程序在冰淇淋设备上崩溃.下面的方法会起作用吗?

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

编辑:

我试过了getSize,但我没有让它工作:

  Display display = getWindowManager().getDefaultDisplay();
      Point size = new Point();
      display.getSize(size);
      int width = size.x;
      int height = size.y;
Run Code Online (Sandbox Code Playgroud)

小智 23

我不确定,但这可行:

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR2) {
    Display display = getWindowManager().getDefaultDisplay();
    int width = display.getWidth();
    int height = display.getHeight();
} else {
    Display display = getWindowManager().getDefaultDisplay();
    Point size = new Point();
    display.getSize(size);
    int width = size.x;
    int height = size.y;
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*ell 12

我不知道这些弃用的方法是否适用于Android 3和4.最好的方法是在模拟器上进行测试.

但是,这里最安全的兼容方法是使用反射尝试一种方法,然后再回到另一种方法.从本质上讲,你可以使自己的版本getSize()不会失败.我不能测试这个atm,但它可能看起来像这样:

void overrideGetSize(Display display, Point outSize) {
    try {
      // test for new method to trigger exception
      Class pointClass = Class.forName("android.graphics.Point");
      Method newGetSize = Display.class.getMethod("getSize", new Class[]{ pointClass });

      // no exception, so new method is available, just use it
      newGetSize.invoke(display, outSize);
    } catch(NoSuchMethodException ex) {
      // new method is not available, use the old ones
      outSize.x = display.getWidth();
      outSize.y = display.getHeight();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后当然只是用类似的东西来称呼它

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
overrideGetSize(display, size);
Run Code Online (Sandbox Code Playgroud)