Gibt es eine Möglichkeit android physische Bildschirmhöhe in cm oder Zoll zu bestimmen?
-
25-09-2019 - |
Frage
Ich muß genau wissen, wie groß der Bildschirm auf dem Gerät in realen Einheiten der Länge ist, damit ich die Erdbeschleunigung in Pixel pro Millisekunde berechnen kann.
Gibt es eine Methode irgendwo in dem Android-API für das?
Lösung
Verwenden Sie die folgenden Schritte aus:
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(mWidthPixels/dm.xdpi,2);
double y = Math.pow(mHeightPixels/dm.ydpi,2);
double screenInches = Math.sqrt(x+y);
Log.d("debug","Screen inches : " + screenInches);
Wenn mWidthPixels und mHeightPixels werden von unten Code genommen
private void setRealDeviceSizeInPixels()
{
WindowManager windowManager = getWindowManager();
Display display = windowManager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);
// since SDK_INT = 1;
mWidthPixels = displayMetrics.widthPixels;
mHeightPixels = displayMetrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17)
{
try
{
mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
}
catch (Exception ignored)
{
}
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17)
{
try
{
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
mWidthPixels = realSize.x;
mHeightPixels = realSize.y;
}
catch (Exception ignored)
{
}
}
Sehen Sie diesen Beitrag als Referenz: Get Bildschirmabmessungen in Pixel
Andere Tipps
für das Erhalten der aktuellen Größe Verwendung Math.round am Ende.
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(dm.widthPixels/dm.xdpi,2);
double y = Math.pow(dm.heightPixels/dm.ydpi,2);
double screenInches = Math.sqrt(x+y);
Log.d("debug","Screen inches : " + screenInches);
screenInches= (double)Math.round(screenInches * 10) / 10;
android Entwickler Bildschirm info.
Verwendung xdpi * widthPixels
und ydpi * heightPixels
könnten Sie bekommen, was Sie wollen, denke ich.
Nach dem Code-Schnipsel werden Sie helfen, bekommen Bildschirmgröße in Zoll
public static double getScreenSizeInches(Activity activity){
WindowManager windowManager = activity.getWindowManager();
Display display = windowManager.getDefaultDisplay();
DisplayMetrics displayMetrics = new DisplayMetrics();
display.getMetrics(displayMetrics);
// since SDK_INT = 1;
int mWidthPixels = displayMetrics.widthPixels;
int mHeightPixels = displayMetrics.heightPixels;
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) {
try{
mWidthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
mHeightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
} catch (Exception ignored) {}
}
// includes window decorations (statusbar bar/menu bar)
if (Build.VERSION.SDK_INT >= 17) {
try {
Point realSize = new Point();
Display.class.getMethod("getRealSize", Point.class).invoke(display, realSize);
mWidthPixels = realSize.x;
mHeightPixels = realSize.y;
} catch (Exception ignored) {}
}
DisplayMetrics dm = new DisplayMetrics();
activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
double x = Math.pow(mWidthPixels / dm.xdpi, 2);
double y = Math.pow(mHeightPixels / dm.ydpi, 2);
return Math.sqrt(x + y);
}
Hope diese Hilfe.
habe ich diese die reale Größe zu erhalten
final DisplayMetrics metrics = new DisplayMetrics();
final WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
windowManager.getDefaultDisplay().getRealMetrics(metrics);
}
else {
windowManager.getDefaultDisplay().getMetrics(metrics);
}
int realHeight = metrics.heightPixels; // This is real height
int realWidth = metrics.widthPixels; // This is real width
Sie müssen die Rasterdichte verwenden, um dies zu berechnen.
Context.getResources().getDisplayMetrics().density
Nach der Dokumentation:
Die logische Dichte des Displays. Dies ist ein Skalierungsfaktor für die Dichte unabhängiger Pixeleinheit, wobei ein DIP eines Pixel auf eine etwa 160 dpi-Bildschirm ist (zum Beispiel einer 240x320, 1,5 „x2“ screen), die Grundlinie des Display des Systems bereitstellt. Somit auf einem 160dpi-Bildschirm wird dieser Dichtewert 1 sein kann; auf einem 120 dpi-Bildschirm würde es sein, .75; etc.
ist dieser Wert nicht genau der realen Bildschirmgröße folgen (wie von xdpi und ydpi gegeben, sondern vielmehr dazu verwendet wird, um die Größe der gesamten Benutzeroberfläche in Schritten basierend auf Brutto-Änderungen in der Anzeige dpi skaliert wird. Zum Beispiel kann ein 240x320 Bildschirm eine Dichte von 1, auch wenn seine Breite 1,8" , 1,3" , usw. wenn jedoch die Bildschirmauflösung auf 320x480 erhöht aber die Bildschirmgröße blieb 1,5 ‚x2‘ dann wäre die Dichte (wahrscheinlich bis 1,5) erhöht werden.