Pregunta

Necesito saber exactamente qué tan grande es la pantalla en el dispositivo en unidades reales de longitud para que pueda calcular la aceleración debida a la gravedad en píxeles por milisegundo.

¿Hay alguna parte de un método en el API de Android para esto?

¿Fue útil?

Solución

Utilice la siguiente:

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

Cuando mWidthPixels y mHeightPixels se toman desde abajo código

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

Ver este post para referencia: Get dimensiones de la pantalla en píxeles

Otros consejos

para conseguir el uso actual tamaño Math.round al final.

 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;

androide desarrolladores información de la pantalla.

El uso xdpi * widthPixels y ydpi * heightPixels podría conseguir lo que quiere, creo.

siguiente fragmento de código le ayudará a obtener Tamaño de la pantalla en pulgadas

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

Espero que esto ayuda.

Me lo utilizó para obtener el tamaño real

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

Es necesario utilizar la densidad de pantalla para el cálculo de este.

Context.getResources().getDisplayMetrics().density

De acuerdo con la documentación:

  

La densidad lógico de la pantalla. Este es un factor de escala para la unidad de Pixel Independiente Densidad, donde uno DIP es un píxel en un (una pantalla, por ejemplo, 240x320, 1.5 "x2") de aproximadamente 160 dpi, proporcionando la línea de base de la pantalla del sistema. Por lo tanto en una pantalla de 160dpi este valor de densidad será 1; en una pantalla de 120 ppp sería 0,75; etc.

     

Este valor no sigue exactamente el tamaño real de la pantalla (como se da por xdpi y ydpi, sino que se utiliza para escalar el tamaño de la interfaz de usuario en general en los pasos basado en los cambios brutos en el dpi pantalla. Por ejemplo, una pantalla de 240x320 tendrá una densidad de 1 incluso si su ancho es de 1,8" , 1,3" , etc. sin embargo, si la resolución de la pantalla se incrementa a 320x480 pero el tamaño de la pantalla se mantuvo 1,5 'x2', entonces sería el aumento de la densidad (probablemente a 1,5).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top