Android definiert Bildschirmgrößen als Normal Large XLarge usw.
Es wird automatisch zwischen statischen Ressourcen in entsprechenden Ordnern ausgewählt. Ich benötige diese Daten zum aktuellen Gerät in meinem Java-Code. Die DisplayMetrics gibt nur Auskunft über die aktuelle Gerätedichte. Bezüglich der Bildschirmgröße ist nichts verfügbar.
Ich habe die ScreenSize-Enumeration hier im Grep-Code gefunden. Dies scheint mir jedoch für 4.0 SDK nicht verfügbar zu sein. Gibt es eine Möglichkeit, diese Informationen zu erhalten?
android
android-screen
user1454356
quelle
quelle
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 + "}"; }
quelle
Bildschirmgröße bestimmen:
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(); }
Dichte bestimmen:
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; }
für Ref: http://devl-android.blogspot.in/2013/10/wifi-connectivity-and-hotspot-in-android.html
quelle
Ich denke, es ist ein ziemlich einfacher Code!
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; } }
Diese Methode kann jetzt überall unabhängig verwendet werden. Wenn Sie Informationen zum Gerätebildschirm erhalten möchten, gehen Sie wie folgt vor:
Map<String, Integer> map = deriveMetrics2(this); map.get("screenWidth"); map.get("screenHeight"); map.get("screenDensity");
Ich hoffe, dies könnte für jemanden da draußen hilfreich sein und es einfacher finden, es zu verwenden. Wenn ich neu korrigieren oder verbessern muss, zögern Sie bitte nicht, mich zu informieren! :-)
Prost!!!
quelle
DisplayMetrics displayMetrics = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); int width = displayMetrics.widthPixels; int height = displayMetrics.heightPixels;
quelle
Mit diesem Code können Sie die Anzeigegröße in Pixel ermitteln.
quelle
getHeight
undgetWidth
sind ab API 16 veraltet: Android 4.1 (Jelly Bean)Sie können dies versuchen, es funktioniert Beispiel
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();
quelle
simon-
Unterschiedliche Bildschirmgrößen haben unterschiedliche Pixeldichten. Ein 4-Zoll-Display Ihres Telefons kann mehr oder weniger Pixel haben als ein 26-Zoll-Fernseher. Wenn ich richtig verstehe, möchte er erkennen, welche der Größengruppen der aktuelle Bildschirm klein, normal, groß und extra groß ist. Ich kann mir nur vorstellen, die Pixeldichte zu ermitteln und damit die tatsächliche Größe des Bildschirms zu bestimmen.
quelle
Ich benötige dies für einige meiner Apps und der folgende Code war meine Lösung für das Problem. Nur den Code in onCreate anzeigen. Dies ist eine eigenständige App, die auf jedem Gerät ausgeführt werden kann, um die Bildschirminformationen zurückzugeben.
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);
Und eine einfache XML-Datei
<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" />
quelle
Mit Dekorationen (einschließlich Knopfleiste):
private static String getScreenResolution(Context context) { DisplayMetrics metrics = new DisplayMetrics(); ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRealMetrics(metrics); return "{" + metrics.widthPixels + "," + metrics.heightPixels + "}"; }
Ohne Dekorationen:
private static String getScreenResolution(Context context) { DisplayMetrics metrics = new DisplayMetrics(); ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getMetrics(metrics); return "{" + metrics.widthPixels + "," + metrics.heightPixels + "}"; }
Der Unterschied ist die Methode getMetrics () vs getRealMetrics () der Display-Klasse.
quelle
Möglichkeiten, um DisplayMetrics zu erhalten:
1.
val dm = activity.resources.displayMetrics
val dm = DisplayMetrics() activity.windowManager.defaultDisplay.getMetrics(dm)
dann bekommen
Die Bildschirmdichte ausgedrückt als Punkte pro Zoll. Kann entweder DENSITY_LOW, DENSITY_MEDIUM oder DENSITY_HIGH sein
dm.densityDpi
Die absolute Höhe der verfügbaren Anzeigegröße in Pixel.
dm.heightPixels
Die absolute Breite der verfügbaren Anzeigegröße in Pixel.
dm.widthPixels
Die genauen physischen Pixel pro Zoll des Bildschirms in der X-Dimension.
dm.xdpi
Die genauen physischen Pixel pro Zoll des Bildschirms in der Y-Dimension.
dm.ydpi
DisplayMetrics
quelle
Wenn Sie sich in einer Nichtaktivität befinden, z. B. Fragment, Adapter, Modellklasse oder eine andere Java-Klasse, die nicht erweitert wird, funktioniert dies
Activity
einfachgetResources()
nicht. Sie könnengetActivity()
in Fragment verwenden oder verwenden,context
dass Sie an die entsprechende Klasse übergeben.mContext.getResources()
Ich würde empfehlen, eine Klasse dazu zu bringen, Utils zu sagen, die Methoden für die gemeinsame Arbeit haben. Der Vorteil hierfür ist, dass Sie das gewünschte Ergebnis mit einer einzelnen Codezeile an einer beliebigen Stelle in der App erzielen können, die diese Methode aufruft.
quelle
Der folgende Algorithmus kann verwendet werden, um zu identifizieren, welche Kategorie für die Auswahl zwischen den statischen Ressourcen verwendet wird, und um auch die neueren hohen Dichten XX und XXX zu berücksichtigen
DisplayMetrics displayMetrics = new DisplayMetrics(); activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); mDensityDpi = displayMetrics.densityDpi; mDensity = displayMetrics.density; mDisplayWidth = displayMetrics.widthPixels; mDisplayHeight = displayMetrics.heightPixels; String densityStr = "Unknown"; int difference, leastDifference = 9999; difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_LOW); if (difference < leastDifference) { leastDifference = difference; densityStr = "LOW"; } difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_MEDIUM); if (difference < leastDifference) { leastDifference = difference; densityStr = "MEDIUM"; } difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_HIGH); if (difference < leastDifference) { leastDifference = difference; densityStr = "HIGH"; } difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_XHIGH); if (difference < leastDifference) { leastDifference = difference; densityStr = "XHIGH"; } difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_XXHIGH); if (difference < leastDifference) { leastDifference = difference; densityStr = "XXHIGH"; } difference = Math.abs(mDensityDpi - DisplayMetrics.DENSITY_XXXHIGH); if (difference < leastDifference) { densityStr = "XXXHIGH"; } Log.i(TAG, String.format("Display [h,w]: [%s,%s] Density: %s Density DPI: %s [%s]", mDisplayHeight, mDisplayWidth, mDensity, mDensityDpi, densityStr));
quelle
Holen Sie sich die Bildschirmauflösung oder Bildschirmgröße in Kotlin
fun getScreenResolution(context: Context): Pair<Int, Int> { try { val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager val display = wm.defaultDisplay val metrics = DisplayMetrics() display.getMetrics(metrics) val width = metrics.widthPixels val height = metrics.heightPixels //Log.d(AppData.TAG, "screenSize: $width, $height") return Pair(width, height) } catch (error: Exception) { Log.d(AppData.TAG, "Error : autoCreateTable()", error) } return Pair(0, 0) }
quelle
Der Code gibt Ihnen das Ergebnis im folgenden Format: Breite x Höhe
String displayResolution = getResources().getDisplayMetrics().widthPixels + "x" + getResources().getDisplayMetrics().heightPixels;
quelle