Как я могу получить ScreenSize программно в android
Android определяет размеры экрана как обычный большой XLarge и т. д.
он автоматически выбирает между статическими ресурсами в соответствующих папках. Мне нужны эти данные о текущем устройстве в моем java-коде. DisplayMetrics только дает информацию о текущей плотности устройства. Ничего не доступно относительно размера экрана.
Я нашел перечисление ScreenSize в коде grep здесь Однако это не кажется мне доступным для 4.0 SDK. Есть ли способ получить эта информация?
11 ответов:
скопируйте и вставьте этот код в код
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-дюймовый телевизор. Если я правильно понимаю, он хочет определить, какие из групп размеров текущий экран, маленький, нормальный, большой и очень большой. Единственное, что я могу придумать, это определить плотность пикселей и использовать ее для определения фактического размера экрана.
мне это нужно для нескольких моих приложений, и следующий код был моим решением проблемы. Просто показываю код внутри 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-файл
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity" > <TextView android:id="@+id/tvSize" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/density" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/densityDpi" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/widthPixels" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/xdpi" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <TextView android:id="@+id/ydpi" android:layout_width="wrap_content" android:layout_height="wrap_content" />
Я думаю, что это довольно прямо вперед, просто кусок кода!
public Map<String, Integer> deriveMetrics(Activity activity) { try { DisplayMetrics metrics = new DisplayMetrics(); if (activity != null) { activity.getWindowManager().getDefaultDisplay().getMetrics(metrics); } Map<String, Integer> map = new HashMap<String, Integer>(); 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<String, Integer> 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
[EDIT]
Ах, я что-то упускаю. Мозг! +1 к Алексу.
если вы находитесь в неактивности, т. е. фрагмент, адаптер, класс модели или любой другой класс java, который не расширяет
Activity
простоgetResources()
не будет работать. Вы можете использоватьgetActivity()
фрагмент или использоватьcontext
что вы переходите к соответствующему классу.mContext.getResources()
Я бы рекомендовал сделать класс say Utils, который будет иметь метод / методы для общей работы. Преимущество этого заключается в том, что вы можете получить желаемый результат с помощью одной строки кода в любом месте приложения, вызывающего этот метод.