0

我写了一个fragment的demo,在android 3.0下,该方法getWidth()getHeigh()已弃用。我读了api,发现这getSize(point)两种方法是一样的,所以我试试。

  Display d = wm.getDefaultDisplay();
  int width=0;
  int height=0;
  Point point = new Point(width,height);
  d.getRealSize(point);

但是当我运行应用程序时,出现错误,有没有人发现这样的问题?:

02-01 03:13:06.548: E/AndroidRuntime(558): FATAL EXCEPTION: main
02-01 03:13:06.548: E/AndroidRuntime(558): java.lang.NoSuchMethodError: android.view.Display.getRealSize
02-01 03:13:06.548: E/AndroidRuntime(558):  at com.demo.fragment.FragmentDemoActivity.onCreate(FragmentDemoActivity.java:33)
02-01 03:13:06.548: E/AndroidRuntime(558):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
02-01 03:13:06.548: E/AndroidRuntime(558):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
4

2 回答 2

3

Display.getRealSize()方法是在 Android 4.2 的 API 17 中添加的。如果您尝试在低于此的设备上使用它,您将收到 NoSuchMethodException,因为该方法不存在。

Display.getSize()是在 Android 3.2 的 API 13 中添加的。您想在 Android 3.0(即 API 11)上使用该应用程序。

因此,对于较旧的设备,甚至是当前设备(我还没有听说过实际从 Android 中删除的已弃用方法),您应该使用getWidth()getHeight()

或者您可以在 if else 语句中运行代码,例如:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1){
    //Do something for API 17 only (4.2)
    //getRealSize()
}
else if (currentapiVersion >= android.os.Build.VERSION_CODES.HONEYCOMB_MR2){
    // Do something for API 13 and above , but below API 17 (API 17 will trigger the above block
    //getSize()
} else{
    // do something for phones running an SDK before Android 3.2 (API 13)
    //getWidth(), getHeight()
}
于 2013-02-01T03:19:30.813 回答
0

将此代码用于旧版本和新版本。

private static Point getDisplaySize(final Display display) {

final Point size= new Point();
try {
    display.getSize(size); /// will support new versions
} catch (java.lang.NoSuchMethodError ignore) { // Older versions
    size.x = display.getWidth();
    size.y = display.getHeight();
}
return size;

}

于 2014-04-03T09:23:02.590 回答