639 Stimmen

Bildschirmbreite und -höhe in Android ermitteln

Wie kann ich die Breite und Höhe des Bildschirms ermitteln und diesen Wert in:

@Override protected void onMeasure(int widthSpecId, int heightSpecId) {
    Log.e(TAG, "onMeasure" + widthSpecId);
    setMeasuredDimension(SCREEN_WIDTH, SCREEN_HEIGHT - 
        game.findViewById(R.id.flag).getHeight());
}

2 Stimmen

2 Stimmen

0 Stimmen

Die aktualisierte richtige Antwort stackoverflow.com/a/67691009/4797289

1229voto

Parag Chauhan Punkte 34996

Mit diesem Code können Sie die Breite und Höhe der Laufzeitanzeige ermitteln:

DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

In einer Ansicht müssen Sie etwas wie folgt tun:

((Activity) getContext()).getWindowManager()
                         .getDefaultDisplay()
                         .getMetrics(displayMetrics);

In einigen Szenarien, in denen Geräte eine Navigationsleiste haben, müssen Sie zur Laufzeit prüfen:

public boolean showNavigationBar(Resources resources)
{
    int id = resources.getIdentifier("config_showNavigationBar", "bool", "android");
    return id > 0 && resources.getBoolean(id);
}

Wenn das Gerät eine Navigationsleiste hat, zählen Sie deren Höhe:

private int getNavigationBarHeight() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);
        int usableHeight = metrics.heightPixels;
        getWindowManager().getDefaultDisplay().getRealMetrics(metrics);
        int realHeight = metrics.heightPixels;
        if (realHeight > usableHeight)
            return realHeight - usableHeight;
        else
            return 0;
    }
    return 0;
}

Die endgültige Höhe des Geräts ist also:

int height = displayMetrics.heightPixels + getNavigationBarHeight();

396voto

weigan Punkte 4417

Es gibt eine sehr einfache Antwort, die ohne Kontext auskommt

public static int getScreenWidth() {
    return Resources.getSystem().getDisplayMetrics().widthPixels;
}

public static int getScreenHeight() {
    return Resources.getSystem().getDisplayMetrics().heightPixels;
}

Hinweis: Wenn Sie die Höhe der Navigationsleiste einschließen möchten, verwenden Sie die folgende Methode

WindowManager windowManager =
        (WindowManager) BaseApplication.getApplication().getSystemService(Context.WINDOW_SERVICE);
    final Display display = windowManager.getDefaultDisplay();
    Point outPoint = new Point();
    if (Build.VERSION.SDK_INT >= 19) {
        // include navigation bar
        display.getRealSize(outPoint);
    } else {
        // exclude navigation bar
        display.getSize(outPoint);
    }
    if (outPoint.y > outPoint.x) {
        mRealSizeHeight = outPoint.y;
        mRealSizeWidth = outPoint.x;
    } else {
        mRealSizeHeight = outPoint.x;
        mRealSizeWidth = outPoint.y;
    }

48voto

digiphd Punkte 2259

Nur um die Antwort von parag und SpK zu aktualisieren, damit sie mit der aktuellen SDK-Abwärtskompatibilität von veralteten Methoden übereinstimmt:

int Measuredwidth = 0;  
int Measuredheight = 0;  
Point size = new Point();
WindowManager w = getWindowManager();

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)    {
    w.getDefaultDisplay().getSize(size);
    Measuredwidth = size.x;
    Measuredheight = size.y; 
}else{
    Display d = w.getDefaultDisplay(); 
    Measuredwidth = d.getWidth(); 
    Measuredheight = d.getHeight(); 
}

35voto

wangqi060934 Punkte 1494

Warum nicht

DisplayMetrics displaymetrics = getResources().getDisplayMetrics();

dann verwenden Sie

displayMetrics.widthPixels (heightPixels)

31voto

Ness Tyagi Punkte 1920

Es ist sehr einfach, in Android einzusteigen:

int width  = Resources.getSystem().getDisplayMetrics().widthPixels;
int height = Resources.getSystem().getDisplayMetrics().heightPixels;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X