Android получить размер экрана устарел?

Эй, мне нужно получить ширину экрана в моем приложении. Приложение будет работать на 2.1 и выше. Я установил его, как показано ниже. Метод устарел, и я должен использовать getSize или другим способом. Но вопрос: будет ли это работать с версиями Android, такими как 3.0+ и 4.0+, или это приведет к сбою приложения. Я использовал устаревший метод в потоке раньше, и он заставил приложение сбой на устройствах для мороженого. Будет ли приведенный ниже метод?

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

РЕДАКТИРОВАТЬ:

Я пробовал getSize, но я не получаю его на работу:

  Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); display.getSize(size); int width = size.x; int height = size.y; 

Solutions Collecting From Web of "Android получить размер экрана устарел?"

Я не знаю, будут ли эти устаревшие методы работать на 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(); } } 

Тогда, конечно, просто назовите это чем-то вроде

 Display display = getWindowManager().getDefaultDisplay(); Point size = new Point(); overrideGetSize(display, size); 

Я не уверен, но это может сработать:

 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; } 

Я расширил полезный код Стива, чтобы Eclipse не выдавал никаких предупреждений или ошибок, и я также немного изменил его. Поскольку класс Point присутствует с API уровня 1, я не видел большой пользы в создании его посредством отражения.

  final static String mTAG = "MYTAG"; // Cope with deprecated getWidth() and getHeight() methods Point getSize(Display xiDisplay) { Point outSize = new Point(); boolean sizeFound = false; try { // Test if the new getSize() method is available Method newGetSize = Display.class.getMethod("getSize", new Class[] { Point.class }); // No exception, so the new method is available Log.d(mTAG, "Use getSize to find screen size"); newGetSize.invoke(xiDisplay, outSize); sizeFound = true; Log.d(mTAG, "Screen size is " + outSize.x + " x " + outSize.y); } catch (NoSuchMethodException ex) { // This is the failure I expect when the deprecated APIs are not available Log.d(mTAG, "getSize not available - NoSuchMethodException"); } catch (InvocationTargetException e) { Log.w(mTAG, "getSize not available - InvocationTargetException"); } catch (IllegalArgumentException e) { Log.w(mTAG, "getSize not available - IllegalArgumentException"); } catch (IllegalAccessException e) { Log.w(mTAG, "getSize not available - IllegalAccessException"); } if (!sizeFound) { Log.i(mTAG, "Used deprecated methods as getSize not available"); outSize = new Point(xiDisplay.getWidth(), xiDisplay.getHeight()); } return outSize; } 

Согласно https://stackoverflow.com/a/1016941/2914140 :

 DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int width = metrics.widthPixels; int height = metrics.heightPixels; 

Что не так с новой функцией Display, getSize () ? Было бы очень просто превратить объект Point в нужные вам значения ширины и высоты.