2010-02-03 7 views
43

Muszę wiedzieć dokładnie, jak duży jest ekran na urządzeniu w rzeczywistych jednostkach długości, więc mogę obliczyć przyspieszenie z powodu grawitacji w pikselach na milisekundę.Czy istnieje sposób określania wysokości fizycznego ekranu androida w cm lub calach?

Czy istnieje gdzieś w tym celu API systemu Android?

+0

Jeśli chcesz przeprowadzić jednorazową konwersję (na przykład w celu wyeksportowania sprite'ów z programu Photoshop lub zaprojektowania układu dla wymiaru fizycznego), [tutaj jest sprytny konwerter] (http://pixplicity.com/dp- px-converter /). –

Odpowiedz

82

użyć następujących:

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); 

Kiedy mWidthPixels i mHeightPixels pochodzą z poniżej kod

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

Zobacz ten post dla odniesienia: Get screen dimensions in pixels

+0

Działa dla mnie :) –

+8

Mam ~ 15 urządzeń testowych i na niektórych z nich się nie udaje, np. Nie działa w niektórych modelach, takich jak Motorola Milestone czy telefony ZTE. – STeN

+0

Czy modele uszkodzonych urządzeń mają niestandardową ROM, czy domyślną, dostarczoną przez producenta? Być może jest to coś z ROMem? –

-4

Aby to obliczyć, należy użyć gęstości ekranu.

Context.getResources().getDisplayMetrics().density 

Zgodnie z dokumentacją:

Logicznym gęstości wyświetlacza. Jest to współczynnik skalowania dla jednostki gęstości niezależnej od pikseli, gdzie jeden DIP jest jednym pikselem na ekranie o rozdzielczości w przybliżeniu 160 dpi (na przykład ekran o wymiarach 240x320, 1,5 "x 2"), zapewniając linię podstawową wyświetlacza systemu. Tak więc na ekranie 160dpi ta wartość gęstości będzie wynosić 1; na ekranie 120 dpi będzie to 0,75; itp.

Ta wartość nie jest zgodna z rzeczywistym rozmiarem ekranu (podanym przez xdpi i ydpi, ale służy do skalowania ogólnego interfejsu użytkownika w krokach w oparciu o zmiany brutto na wyświetlaczu dpi. Ekran 240x320 będzie miał gęstość 1, nawet jeśli jego szerokość wynosi 1,8 cala, 1,3 cala itp. Jednak, jeśli rozdzielczość ekranu zostanie zwiększona do 320 x 480, ale rozmiar ekranu pozostanie 1,5 cala x2, wtedy gęstość zostanie zwiększona (prawdopodobnie do 1.5).

+2

Użyj xdpi i ydpi zgodnie z opisem na drugim plakacie. Gęstość celowo nie jest bezwzględnym odwzorowaniem na fizyczny rozmiar ekranu, ale bardziej abstrakcyjną jednostką, którą można skwantyzować do niewielkiej liczby dyskretnych wartości (obecnie 120 dpi, 160 dpi, 240 dpi). – hackbod

+0

Jest to zła metoda, która powoduje niedokładne wartości zarówno rozdzielczości, jak i rozdzielczości. – grebulon

8

uzyskania aktualnego wykorzystania rozmiar Math .round na końcu.

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

Po Fragment kodu pomoże Ci uzyskać Rozmiar ekranu w calach

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

nadzieję, że to pomaga.

Powiązane problemy