Question

Je dois savoir exactement la taille de l'écran est sur le périphérique en unités réelles de longueur afin que je puisse calculer l'accélération due à la pesanteur en pixels par milliseconde.

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

Était-ce utile?

La solution

Utilisez les éléments suivants:

    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 prises par le bas code

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: Get dimensions de l'écran en pixels

Autres conseils

pour obtenir l'utilisation actuelle de la taille 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;

développeurs android écran d'info.

et l'utilisation xdpi * widthPixels ydpi * heightPixels pourrait vous obtenir ce que vous voulez que je pense.

Après l'extrait de code vous aider à obtenir Taille de l'écran en pouces

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

Espérons que cela aide.

J'ai utilisé ce pour obtenir la taille réelle

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

Vous devez utiliser la densité de l'écran pour calculer cela.

Context.getResources().getDisplayMetrics().density

Selon la documentation:

  

La densité logique de l'écran. Ceci est un facteur d'échelle pour la densité unité de pixel indépendante, où une DIP est un pixel sur un écran d'environ 160 dpi (par exemple 240x320, 1,5 écran « x2 »), fournissant la ligne de base de l'affichage du système. Ainsi sur un écran 160dpi cette valeur de densité sera 1; sur un écran de 120 dpi, il serait 0,75; etc.

     

Cette valeur ne suit pas exactement la taille réelle de l'écran (comme indiqué par xdpi et ydpi, mais est utilisé à l'échelle de la taille de l'interface utilisateur globale dans les étapes en fonction des variations brutes du dpi d'affichage. Par exemple, un écran 240x320 aura une densité de 1, même si sa largeur est de 1,8" , 1,3" , etc. Cependant, si la résolution de l'écran est augmentée à 320x480, mais la taille de l'écran est resté 1,5 « x2 » alors la densité serait augmentée (probablement à 1,5).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top