Intereting Posts
Как создать экскурсию для приложения для Android Обнаружение тегов NFC не вызывает onNewIntent, и он запускает из основной активности Подписка на темы с токеном Google Cloud Messenger, Недействительный аргумент Номер прогона Android ProGuard Отображение ImageView в макете, но не на самом устройстве Android – ограничение количества фрагментов в backStack? Как отобразить HTML-страницу из необработанной папки в res с Android-сайтом Android? Как установить базовое время Android Chronometer из объекта Date? Через некоторое время мое приложение зависает во время прокрутки WebView, говоря «не удалось заблокировать поверхность», GridLayout из библиотеки поддержки не показывает 2 строки на Android 2, onChildVisibilityChanged Error Можно ли использовать Mozilla Persona (BrowserID) с мобильными приложениями? Чтение файла изображения в растровое изображение из sdcard, почему я получаю исключение NullPointerException? Плагин LaunchNavigator Ionic2 не установлен Android, что эквивалентно классу DrawerLayout, когда не используется библиотека поддержки? OnLocationChanged не вызывается автоматически

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 в нужные вам значения ширины и высоты.