54 votes

Existe-t-il un moyen de déterminer la hauteur de l'écran physique Android en cm ou en pouces?

J'ai besoin de savoir exactement quelle est la taille de l'écran de l'appareil en unités de longueur réelles pour pouvoir calculer l'accélération de la gravité en pixels par milliseconde.

Existe-t-il une méthode quelque part dans l'API Android pour cela?

93voto

Bghaak Points 721

Utilisez le suivant:

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

Lorsque mWidthPixels et mHeightPixels sont extraits du code ci-dessous

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

Voir ce post pour référence: Comment obtenir les dimensions de l'écran

9voto

gilix Points 282

pour obtenir la taille actuelle, utilisez Math.round à la fin.

  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;
 

4voto

gingerbreadboy Points 3129

Informations sur l'écran des développeurs Android.

utiliser xdpi * widthPixels et ydpi * heightPixels pourrait vous donner ce que vous voulez, je pense.

-4voto

CaseyB Points 16014

Vous avez besoin d'utiliser l'écran de la densité de la calculer.

Context.getResources().getDisplayMetrics().density

Selon la documentation:

La logique de la densité de l'écran. C'est un facteur d'échelle pour la Densité de Pixel Indépendant de l'unité, où l'on DIP est un pixel sur une distance d'environ 160 dpi de l'écran (par exemple un 240x320, 1.5"x2" à l'écran), fournissant la base de l'écran du système. Ainsi, sur une 160dpi écran de cette densité, la valeur est 1; 120 dpi de l'écran, il serait .75; etc.

Cette valeur ne correspond pas exactement à suivre la vraie taille de l'écran (comme par xdpi et ydpi, mais est plutôt utilisé à l'échelle de la taille de l'ensemble de l'INTERFACE utilisateur dans les étapes brute des changements dans l'affichage dpi. Par exemple, un écran de 240x320 aura une densité de 1, même si sa largeur est de 1,8", 1.3", etc. Toutefois, si la résolution de l'écran est augmentée de 320x480, mais la taille de l'écran est resté 1.5"x2", alors la densité serait augmenté (probablement à 1.5).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X