1969 Stimmen

Wie man in Android die Bildschirmabmessungen als Pixel erhält

Ich habe einige benutzerdefinierte Elemente erstellt, die ich programmgesteuert in der oberen rechten Ecke platzieren möchte ( n Pixel vom oberen Rand und m Pixel vom rechten Rand). Daher muss ich die Bildschirmbreite und die Bildschirmhöhe ermitteln und dann die Position festlegen:

int px = screenWidth - m;
int py = screenHeight - n;

Wie erhalte ich screenWidth y screenHeight in der Hauptaktivität?

0 Stimmen

Verwenden Sie dp statt px, da dies Ihr Layout bei anderen Geräten verzerren würde.

0 Stimmen

Vergessen Sie nicht, mit getResources().getDisplayMetrics().density zu multiplizieren, um die Skalierung der Anzeige zu berücksichtigen.

0 Stimmen

Dies beweist, dass die am meisten hochgestufte Antwort nicht immer die beste ist (& viele Leute wiederholen Antworten, um sie zu wiederholen). Anstelle von getSize und der veralteten getWidth/getHeight-Kombination (Fehler ignorieren), versuchen Sie Balaji.K's getMetrics . Der Kommentar von Nik in seiner Antwort erklärt sogar getDisplayMetrics um die Größe der System-/Statusleiste zu berücksichtigen. Sie können auch verwenden Dichte wie jmaculate und LoungeKatt erklärt haben, um die EXAKT Wert: DisplayMetrics dm = getResources().getDisplayMetrics(); float fwidth = dm.density * dm.widthPixels; Getestet in Android v2.2 (API 8) und v4.0 mit guten Ergebnissen und keine Fehler/Warnungen .

55voto

Zelleriation Punkte 2824

Das ist der einfachste Weg:

 int screenHeight = getResources().getDisplayMetrics().heightPixels;
 int screenWidth = getResources().getDisplayMetrics().widthPixels;

48voto

Swapnil Sonar Punkte 2242

Für den Zugriff auf die Höhe der Statusleiste für Android-Geräte bevorzugen wir einen programmatischen Weg, um sie zu erhalten:

Beispiel-Code

int resId = getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resId > 0) {
    result = getResources().getDimensionPixelSize(resId);
}

Die Variable result gibt die Höhe im Pixel an.

Für schnellen Zugriff

Enter image description here

Für weitere Informationen über die Höhe der Title bar , Navigation bar y Content View schauen Sie bitte weiter Bildschirmgrößen von Android-Geräten .

0 Stimmen

Genau das, was ich brauchte! getResources().getDisplayMetrics().heightPixels + result gibt die tatsächliche Höhe im Vollbildmodus an. Die Antwort von Dragan Marjanovic funktioniert auch, aber ich bevorzuge diese viel kürzere und einfachere Lösung.

0 Stimmen

Dieser Ansatz ist seit Android Marshmallow veraltet. Die Höhe der Statusleiste kann sich je nach Gerät oder Android-Version ändern. Besser verwenden OnApplyWindowInsetsListener .

33voto

Marcin Gil Punkte 65334

Zuerst Ansicht erhalten (z. B. durch findViewById() ) und dann können Sie getWidth() auf die Ansicht selbst.

3 Stimmen

Dies ist eigentlich, wie die Dokumentation sagt Ihnen, es zu tun ... aber es ist irgendwie sinnlos, wenn Sie NICHT eine Ansicht verwenden. Sie können etwas anderes, z.B. mglsurfaceview verwenden.

2 Stimmen

Ist dies besser, da die übergeordnete Ansicht möglicherweise nicht der Größe des Bildschirms entspricht. Stellen Sie jedoch sicher, dass dies zu einem Zeitpunkt geschieht, an dem die Ansicht, deren Größe Sie abfragen wollen, bereits angelegt wurde, was normalerweise nicht innerhalb von onCreate() der Fall ist. Sie können einen benutzerdefinierten Callback von onWindowFocusChanged(boolean hasFocus) verwenden, der aufgerufen wird, nachdem alle Ansichten gemessen wurden und so weiter, um sicherzustellen, dass Sie keine falschen Abmessungen für die Ansicht erhalten, an der Sie interessiert sind...

29voto

Jorgesys Punkte 119076

Ich habe zwei Funktionen, eine zum Senden des Kontexts und die andere zum Abrufen von Höhe und Breite in Pixeln:

public static int getWidth(Context mContext){
    int width=0;
    WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    if(Build.VERSION.SDK_INT>12){
        Point size = new Point();
        display.getSize(size);
        width = size.x;
    }
    else{
        width = display.getWidth();  // Deprecated
    }
    return width;
}

y

public static int getHeight(Context mContext){
    int height=0;
    WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
    Display display = wm.getDefaultDisplay();
    if(Build.VERSION.SDK_INT>12){
        Point size = new Point();
        display.getSize(size);
        height = size.y;
    }
    else{
        height = display.getHeight();  // Deprecated
    }
    return height;
}

0 Stimmen

Sie müssen Folgendes hinzufügen @SuppressLint("NewApi") direkt über der Funktionssignatur, um kompiliert werden zu können.

0 Stimmen

Ich denke, es ist besser, die Höhe und Breite in einem Durchgang zu erhalten, anstatt in separaten Aufrufen der APIs, weil sie sonst aus der Synchronisation sein könnte. Dies könnte passieren, wenn sich die Bildschirmausrichtung ändert, während Ihr Code ausgeführt wird.

19voto

Pijusn Punkte 10605

Dies ist der Code, den ich für diese Aufgabe verwende:

// `activity` is an instance of Activity class.
Display display = activity.getWindowManager().getDefaultDisplay();
Point screen = new Point();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) {
    display.getSize(screen);
} else {            
    screen.x = display.getWidth();
    screen.y = display.getHeight();
}

Scheint sauber genug zu sein und kümmert sich dennoch um die Veralterung.

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