Как я могу получить ScreenSize программно в android

Android определяет размеры экрана как Normal Large XLarge и т. Д.

Он автоматически выбирает между статическими ресурсами в соответствующих папках. Мне нужны эти данные о текущем устройстве в моем java-коде. DisplayMetrics предоставляет информацию о текущей плотности устройства. Нет ничего относительно размера экрана.

Я нашел перечисление ScreenSize в grep-коде здесь. Однако это не кажется мне доступным для 4.0 SDK. Есть ли способ получить эту информацию?

    Скопируйте и вставьте этот код в свою Activity и когда он будет выполнен, он Toast к размеру экрана экрана устройства.

     int screenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK; String toastMsg; switch(screenSize) { case Configuration.SCREENLAYOUT_SIZE_LARGE: toastMsg = "Large screen"; break; case Configuration.SCREENLAYOUT_SIZE_NORMAL: toastMsg = "Normal screen"; break; case Configuration.SCREENLAYOUT_SIZE_SMALL: toastMsg = "Small screen"; break; default: toastMsg = "Screen size is neither large, normal or small"; } Toast.makeText(this, toastMsg, Toast.LENGTH_LONG).show(); 
     private static String getScreenResolution(Context context) { WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); Display display = wm.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); int width = metrics.widthPixels; int height = metrics.heightPixels; return "{" + width + "," + height + "}"; } 

    Определить размер экрана:

     int screenSize = getResources().getConfiguration().screenLayout &Configuration.SCREENLAYOUT_SIZE_MASK; switch(screenSize) { case Configuration.SCREENLAYOUT_SIZE_LARGE: Toast.makeText(this, "Large screen",Toast.LENGTH_LONG).show(); break; case Configuration.SCREENLAYOUT_SIZE_NORMAL: Toast.makeText(this, "Normal screen",Toast.LENGTH_LONG).show(); break; case Configuration.SCREENLAYOUT_SIZE_SMALL: Toast.makeText(this, "Small screen",Toast.LENGTH_LONG).show(); break; default: Toast.makeText(this, "Screen size is neither large, normal or small" , Toast.LENGTH_LONG).show(); } 

    Определить плотность:

     int density= getResources().getDisplayMetrics().densityDpi; switch(density) { case DisplayMetrics.DENSITY_LOW: Toast.makeText(context, "LDPI", Toast.LENGTH_SHORT).show(); break; case DisplayMetrics.DENSITY_MEDIUM: Toast.makeText(context, "MDPI", Toast.LENGTH_SHORT).show(); break; case DisplayMetrics.DENSITY_HIGH: Toast.makeText(context, "HDPI", Toast.LENGTH_SHORT).show(); break; case DisplayMetrics.DENSITY_XHIGH: Toast.makeText(context, "XHDPI", Toast.LENGTH_SHORT).show(); break; } 

    для Ref: http://devl-android.blogspot.in/2013/10/wifi-connectivity-and-hotspot-in-android.html

    Этот код можно получить в пикселях.

     Display display = getWindowManager().getDefaultDisplay(); SizeUtils.SCREEN_WIDTH = display.getWidth(); SizeUtils.SCREEN_HEIGHT = display.getHeight(); 

    Вы можете попробовать это, он работает Пример

     DisplayMetrics displaymetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); int ht = displaymetrics.heightPixels; int wt = displaymetrics.widthPixels; if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) { Toast.makeText(this, "Large screen", Toast.LENGTH_LONG).show();} else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) { Toast.makeText(this, "Normal sized screen", Toast.LENGTH_LONG) .show(); } else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) { Toast.makeText(this, "Small sized screen", Toast.LENGTH_LONG) .show(); } else { Toast.makeText(this, "Screen size is neither large, normal or small", Toast.LENGTH_LONG).show(); } // Determine density DisplayMetrics metrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metrics); int density = metrics.densityDpi; if (density == DisplayMetrics.DENSITY_HIGH) { Toast.makeText(this, "DENSITY_HIGH... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show(); } else if (density == DisplayMetrics.DENSITY_MEDIUM) { Toast.makeText(this, "DENSITY_MEDIUM... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show(); } else if (density == DisplayMetrics.DENSITY_LOW) { Toast.makeText(this, "DENSITY_LOW... Density is " + String.valueOf(density), Toast.LENGTH_LONG).show(); } else { Toast.makeText( this, "Density is neither HIGH, MEDIUM OR LOW. Density is " + String.valueOf(density), Toast.LENGTH_LONG) .show(); } // These are deprecated Display display = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)) .getDefaultDisplay(); int width = display.getWidth(); int height = display.getHeight(); 
     DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int width = displayMetrics.widthPixels; int height = displayMetrics.heightPixels; 

    Симон

    Различные размеры экрана имеют разную плотность пикселей. 4-дюймовый дисплей на вашем телефоне может иметь более или менее пикселей, а затем сказать 26-дюймовый телевизор. Если Im правильно понимает, он хочет определить, какая из групп размеров имеет текущий экран, маленький, обычный, большой и очень большой. Единственное, о чем я могу думать, это определить плотность пикселей и использовать их для определения фактического размера экрана.

    Мне нужно это для нескольких моих приложений, и следующий код был моим решением проблемы. Просто покажите код внутри onCreate. Это автономное приложение для запуска на любом устройстве, чтобы вернуть информацию о экране.

     setContentView(R.layout.activity_main); txSize = (TextView) findViewById(R.id.tvSize); density = (TextView) findViewById(R.id.density); densityDpi = (TextView) findViewById(R.id.densityDpi); widthPixels = (TextView) findViewById(R.id.widthPixels); xdpi = (TextView) findViewById(R.id.xdpi); ydpi = (TextView) findViewById(R.id.ydpi); Configuration config = getResources().getConfiguration(); if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_LARGE) { Toast.makeText(this, "Large screen", Toast.LENGTH_LONG).show(); txSize.setText("Large screen"); } else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_NORMAL) { Toast.makeText(this, "Normal sized screen", Toast.LENGTH_LONG) .show(); txSize.setText("Normal sized screen"); } else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_SMALL) { Toast.makeText(this, "Small sized screen", Toast.LENGTH_LONG) .show(); txSize.setText("Small sized screen"); } else if ((getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE) { Toast.makeText(this, "xLarge sized screen", Toast.LENGTH_LONG) .show(); txSize.setText("Small sized screen"); } else { Toast.makeText(this, "Screen size is neither large, normal or small", Toast.LENGTH_LONG).show(); txSize.setText("Screen size is neither large, normal or small"); } Display display = getWindowManager().getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); display.getMetrics(metrics); Log.i(TAG, "density :" + metrics.density); density.setText("density :" + metrics.density); Log.i(TAG, "D density :" + metrics.densityDpi); densityDpi.setText("densityDpi :" + metrics.densityDpi); Log.i(TAG, "width pix :" + metrics.widthPixels); widthPixels.setText("widthPixels :" + metrics.widthPixels); Log.i(TAG, "xdpi :" + metrics.xdpi); xdpi.setText("xdpi :" + metrics.xdpi); Log.i(TAG, "ydpi :" + metrics.ydpi); ydpi.setText("ydpi :" + metrics.ydpi); 

    И простой XML-файл

            

    Я думаю, что это довольно простой простой код!

     public Map deriveMetrics(Activity activity) { try { DisplayMetrics metrics = new DisplayMetrics(); if (activity != null) { activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); } Map map = new HashMap(); map.put("screenWidth", Integer.valueOf(metrics.widthPixels)); map.put("screenHeight", Integer.valueOf(metrics.heightPixels)); map.put("screenDensity", Integer.valueOf(metrics.densityDpi)); return map; } catch (Exception err) { ; // just use zero values return null; } } 

    Этот метод теперь можно использовать где угодно независимо. Везде, где вы хотите получить информацию о экране устройства, сделайте следующее:

      Map map = deriveMetrics2(this); map.get("screenWidth"); map.get("screenHeight"); map.get("screenDensity"); 

    Надеюсь, это может быть полезно для кого-то там и может показаться ему проще в использовании. Если мне нужно перекорректировать или улучшить, пожалуйста, не стесняйтесь, дайте мне знать! 🙂

    Ура !!!

    Я должен что-то упустить. DisplayMetrics.widthPixels, DisplayMetrics.heightPixels?

    http://developer.android.com/reference/android/util/DisplayMetrics.html#heightPixels

    [РЕДАКТИРОВАТЬ]

    Ах, я что-то упустил. Мозг! +1 для Алекса.

    Если вы находитесь в неактивности, то есть fragment, адаптер, class модели или любой другой class java, который не расширяет Activity просто getResources() не будет работать. Вы можете использовать getActivity() в fragmentе или использовать context который вы передаете соответствующему classу.

     mContext.getResources() 

    Я бы рекомендовал сделать class, который говорит Utils, который будет иметь метод / Методы для общей работы. Для этого вы можете получить желаемый результат с одной строкой кода в любом месте приложения, вызывающего этот метод.

    Interesting Posts

    Как сделать внешний жесткий USB-накопитель обработан как съемный диск

    Открывает ли много вкладок в Google Chrome проблемы с производительностью?

    utf 8 charset не работает с javax mail

    Автоматически переименовывать файл, если он уже существует в Windows

    Выражения указателя: * ptr ++, * ++ ptr и ++ * ptr

    ASP.NET MVC – Пользовательское сообщение проверки для типов значений

    Как Google Latitude найдет мое точное местоположение на ПК без GPS или общедоступного Wi-Fi?

    Rails 3 ActiveRecord: порядок по количеству ассоциаций

    Eclipse оптимизирует импорт для включения статического импорта

    Определите область правого щелчка для сенсорной панели macbook pro

    Как реализовать iterator стиля STL и избежать распространенных ошибок?

    Разделение адреса на разные ячейки

    Есть ли веская причина для обеспечения максимальной ширины 80 символов в файле кода, в этот день и в возрасте?

    Автономный источник OAuth2 Сервер авторизации JWT + CORS

    Как определить, когда fragment становится видимым в ViewPager

    Давайте будем гением компьютера.