Czy istnieje sposób na określenie fizycznej wysokości ekranu Androida w cm lub calach?

Muszę dokładnie wiedzieć, jak duży jest ekran na urządzeniu w rzeczywistych jednostkach długości, aby móc obliczyć przyspieszenie grawitacyjne w pikselach na milisekundę.

Czy jest jakaś metoda gdzieś w API Androida na to?

Author: Nathan, 2010-02-03

5 answers

Użyj następującego:

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

Gdy mWidthPixels i mHeightPixels są pobierane z poniższego kodu

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 w celach informacyjnych: Pobierz wymiary ekranu w pikselach

 84
Author: Bghaak,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:53

Aby uzyskać bieżący rozmiar użyj matematyki.rundzie 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;
 9
Author: gilix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-06 10:27:21

Android developers screen info.

Użyj xdpi * widthPixels i ydpi * heightPixels może dostaniesz to, czego chcesz.

 4
Author: gingerbreadboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 16:37:56

Poniższy 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);
}
Mam nadzieję, że to pomoże.
 3
Author: Pankaj Lilan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 05:53:54

Musisz użyć gęstości ekranu, aby to obliczyć.

Context.getResources().getDisplayMetrics().density

Zgodnie z dokumentacją:

Logiczna gęstość wyświetlacza. Jest to współczynnik skalowania dla jednostki pikseli niezależnej od gęstości, gdzie jeden piksel DIP to jeden piksel na ekranie o rozdzielczości około 160 dpi (na przykład 240x320, 1,5"X2"), zapewniający linię bazową wyświetlacza systemu. Tak więc na ekranie 160dpi wartość gęstości będzie wynosić 1; na ekranie 120 dpi będzie .75 itd.

To wartość nie odpowiada rzeczywistemu rozmiarowi ekranu (podanemu przez xdpi i ydpi, ale raczej jest używana do skalowania rozmiaru ogólnego interfejsu użytkownika w krokach w oparciu o zmiany brutto w dpi wyświetlacza. Na przykład ekran 240x320 będzie miał gęstość 1, nawet jeśli jego szerokość wynosi 1,8", 1,3 " itp. Jeśli jednak rozdzielczość ekranu zostanie zwiększona do 320x480, ale rozmiar ekranu pozostał 1.5 "x2", gęstość zostanie zwiększona (prawdopodobnie do 1.5).

 -4
Author: CaseyB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-03 16:31:40