2010-02-03 3 views
43

Ich muss genau wissen, wie groß der Bildschirm auf dem Gerät in realen Längeneinheiten ist, damit ich die Beschleunigung aufgrund der Schwerkraft in Pixeln pro Millisekunde berechnen kann.Gibt es eine Möglichkeit, Android physische Bildschirmhöhe in cm oder Zoll zu bestimmen?

Gibt es eine Methode irgendwo in dem Android-API für das?

+0

Wenn Sie suchen eine einmalige Umwandlung (zum Beispiel für Sprites aus Photoshop oder der Gestaltung Ihr Layouts für eine physische Dimension Export) zu tun, [hier ist ein geschicktes Konverter] (http://pixplicity.com/dp- px-konverter /). –

Antwort

82

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 von unten Code genommen werden

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) 
     { 
     } 
    } 

diesen Beitrag anzeigen Referenz: Get screen dimensions in pixels

+0

Funktioniert für mich :) –

+8

Ich habe ~ 15 Testgeräte und es scheitert an einigen von ihnen, z. B. funktioniert es nicht auf einigen Modellen wie Motorola Milestone oder ZTE-Handys. – STeN

+0

Haben die ausgefallenen Geräte Modelle ein eigenes ROM oder das vom Hersteller bereitgestellte Standard-ROM? Vielleicht ist es etwas mit dem ROM? –

-4

Sie müssen die Bildschirmdichte verwenden, um dies zu berechnen.

Context.getResources().getDisplayMetrics().density 

Nach der Dokumentation:

Die logische Dichte des Displays. Dies ist ein Skalierungsfaktor für die dichteunabhängige Pixeleinheit, wobei ein DIP ein Pixel auf einem Bildschirm mit etwa 160 dpi ist (z. B. ein Bildschirm mit 240x320, 1,5 "x2"), der die Grundlinie der Systemanzeige bildet. Auf einem Bildschirm mit 160 dpi ist dieser Dichtewert also 1; auf einem Bildschirm mit 120 dpi wäre es 0,75; etc.

Dieser Wert folgt nicht genau der tatsächlichen Bildschirmgröße (wie von xdpi und ydpi angegeben, sondern wird verwendet, um die Größe der gesamten Benutzeroberfläche in Schritten basierend auf groben Änderungen in der Anzeige dpi zu skalieren. Zum Beispiel ein 240x320-Bildschirm wird eine Dichte von 1 haben, auch wenn seine Breite 1,8 ", 1,3" usw. ist. Wenn jedoch die Bildschirmauflösung auf 320 × 480 erhöht wird, aber die Bildschirmgröße 1,5 "× 2" bleibt, wird die Dichte erhöht (wahrscheinlich auf 1.5).

+2

Verwenden Sie xdpi und ydpi wie vom anderen Poster beschrieben. Die Dichte ist bewusst keine absolute Abbildung auf die physische Bildschirmgröße, sondern eine abstraktere Einheit, die auf eine kleine Anzahl diskreter Werte (derzeit 120 dpi, 160 dpi, 240 dpi) quantisiert werden kann. – hackbod

+0

Dies ist eine schlechte Methode und führt zu ungenauen Werten für dpi und Auflösung. – grebulon

4

android developers screen info.

Verwendung xdpi * widthPixels und ydpi * heightPixels könnten Sie bekommen, was Sie wollen, denke ich.

+3

Hallo, einige Modelle gibt falsche xdpi und ydpi Werte zurück, siehe meinen Kommentar. – STeN

8

für die aktuelle Größe Verwendung Math bekommen .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; 
2

folgende Code-Schnipsel wird Ihnen helfen, in Inches

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 this Hilfe Bildschirmgröße zu erhalten.

Verwandte Themen