Frage

Ich muß genau wissen, wie groß der Bildschirm auf dem Gerät in realen Einheiten der Länge ist, damit ich die Erdbeschleunigung in Pixel pro Millisekunde berechnen kann.

Gibt es eine Methode irgendwo in dem Android-API für das?

War es hilfreich?

Lösung

Verwenden Sie die folgenden Schritte aus:

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

Wenn mWidthPixels und mHeightPixels werden von unten Code genommen

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

Sehen Sie diesen Beitrag als Referenz: Get Bildschirmabmessungen in Pixel

Andere Tipps

für das Erhalten der aktuellen Größe Verwendung Math.round am Ende.

 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;

android Entwickler Bildschirm info.

Verwendung xdpi * widthPixels und ydpi * heightPixels könnten Sie bekommen, was Sie wollen, denke ich.

Nach dem Code-Schnipsel werden Sie helfen, bekommen Bildschirmgröße in Zoll

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

Hope diese Hilfe.

habe ich diese die reale Größe zu erhalten

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

Sie müssen die Rasterdichte verwenden, um dies zu berechnen.

Context.getResources().getDisplayMetrics().density

Nach der Dokumentation:

  

Die logische Dichte des Displays. Dies ist ein Skalierungsfaktor für die Dichte unabhängiger Pixeleinheit, wobei ein DIP eines Pixel auf eine etwa 160 dpi-Bildschirm ist (zum Beispiel einer 240x320, 1,5 „x2“ screen), die Grundlinie des Display des Systems bereitstellt. Somit auf einem 160dpi-Bildschirm wird dieser Dichtewert 1 sein kann; auf einem 120 dpi-Bildschirm würde es sein, .75; etc.

     

ist dieser Wert nicht genau der realen Bildschirmgröße folgen (wie von xdpi und ydpi gegeben, sondern vielmehr dazu verwendet wird, um die Größe der gesamten Benutzeroberfläche in Schritten basierend auf Brutto-Änderungen in der Anzeige dpi skaliert wird. Zum Beispiel kann ein 240x320 Bildschirm eine Dichte von 1, auch wenn seine Breite 1,8" , 1,3" , usw. wenn jedoch die Bildschirmauflösung auf 320x480 erhöht aber die Bildschirmgröße blieb 1,5 ‚x2‘ dann wäre die Dichte (wahrscheinlich bis 1,5) erhöht werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top