2016-03-03 7 views
8

Ich möchte die tatsächliche Bildschirmhöhe des Geräts, das meine App ausführt. Um dies zu erreichen versuchen ich folgend:Abrufen der tatsächlichen Bildschirmhöhe (Android)

 DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     int Height = metrics.heightPixels; 
     TextView HeightView = (TextView) findViewById(R.id.screenHeight); 
     HeightView.setText("Screen Height: " + Height); 

     int Width = metrics.widthPixels; 
     TextView WidthView = (TextView) findViewById(R.id.screenWidth); 
     WidthView.setText("Screen Width: " + Width); 

Das Gerät, das ich mit dem Emulator eine Bildschirmbreite von 1080 Pixel und eine Bildschirmhöhe von 1920 Pixeln. Die Breite wird korrekt angezeigt (1080 Pixel) aber die Höhe beträgt laut App nur 1776 Pixel. Was muss ich tun, damit meine App die richtige Bildschirmhöhe anzeigt? Ist metrics.heightPixels eine schlechte Methode, um die Bildschirmhöhe zu erhalten?

Antwort

20

siehe this Antwort

wenn Ihr API-Ebene> 13 versuchen Sie dies, wenn Sie in der Aktivität sind

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

Wenn Sie nicht in einer Aktivität sind, können Sie die Standard-Anzeige über WINDOW_SERVICE erhalten:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 

getWidth getHeight und ist für die API-Ebene 13 oder weniger

UPDATE

Für API 17 und höher Verfahren Display.getRealSize() Größe des Bildschirms zurückkehrt, wie in documentation erwähnt:

Ruft die reale Größe der Anzeige ohne jeden Fensterdekor zu subtrahieren oder jede Kompatibilitäts Skala Anwendung Faktoren.

Die Größe wird basierend auf der aktuellen Drehung des Displays angepasst.

Die tatsächliche Größe kann kleiner als die physische Größe des Bildschirms sein, wenn der Fenstermanager ein kleineres Display emuliert (mit adb-Shell am Display-Größe).

+1

Keine Ihrer Vorschläge funktioniert nach Bedarf. – lxknvlk

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

Ich brauchte die tatsächlichen verfügbare Höhe zu bekommen, und aus allen Optionen ist dies die einzige Sache, die für mich gearbeitet.

Erstellen Sie ein Rechteck, und seine Dimensionen erhalten:

Rect r = new Rect(); 
activityRootView.getWindowVisibleDisplayFrame(r); 
int screenHeight = r.bottom - r.top; 

wo activityRootView die Stammansicht des Layouts ist.

Wenn Sie die Symbolleiste Höhe extrahieren müssen:

int availableScreenHeight = screenHeight - toolbar.getHeight(); 

wo toolbar Symbolleiste Ansicht ist.

availableScreenHeight wird jetzt ohne die Statusleiste, ohne die Symbolleiste und ohne die Navigationsleiste (wenn das Gerät es verwendet).

Verwandte Themen