Domanda

Ho bisogno di sapere esattamente quanto è grande lo schermo è acceso il dispositivo in unità reali di lunghezza in modo da poter calcolare l'accelerazione di gravità in pixel per millisecondo.

Esiste un metodo in qualche parte del API Android per questo?

È stato utile?

Soluzione

Utilizza il seguente:

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

Quando mWidthPixels e mHeightPixels sono prese dal basso codice

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

Si veda questo post per riferimento: Get dimensioni dello schermo in pixel

Altri suggerimenti

per ottenere l'uso attuale dimensione Math.round alla fine.

 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;

Sviluppatori Android informazioni schermo.

uso xdpi * widthPixels e ydpi * heightPixels potrebbe ottenere ciò che vuoi penso.

seguente frammento di codice vi aiuterà a ottenere Dimensioni schermo pollici

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

Spero che questo aiuto.

ho usato questo per ottenere la dimensione reale

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

È necessario utilizzare la densità degli schermi per calcolare questo.

Context.getResources().getDisplayMetrics().density

Secondo la documentazione:

  

La densità logica del display. Questo è un fattore di scala per la densità Unità indipendente Pixel, dove una DIP è un pixel su un (per esempio uno schermo 240x320, 1.5 "x2") di circa 160 dpi schermo, fornendo la base del display del sistema. Quindi su uno schermo 160dpi questo valore di densità sarà 1; su uno schermo da 120 dpi che sarebbe .75; ecc.

     

Questo valore non seguire esattamente le dimensioni dello schermo reale (come indicato dalla xdpi e ydpi, ma piuttosto viene utilizzato per scalare le dimensioni dell'interfaccia utente generale a passi basato su cambiamenti grossolani nella dpi display. Ad esempio, uno schermo 240x320 avrà una densità di 1 anche se la sua larghezza è 1.8" , 1.3" , ecc Tuttavia, se la risoluzione è aumentata a 320x480 ma le dimensioni dello schermo rimase 1.5 'x2' allora la densità sarebbe aumentata (probabilmente a 1,5).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top