2016-03-03 20 views
8

Voglio ottenere l'altezza effettiva dello schermo del dispositivo che esegue la mia app. Per raggiungere questo provo seguente:Ottenere l'altezza attuale dello schermo (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); 

Il dispositivo che ho eseguito utilizzando l'emulatore ha un rapporto larghezza di 1080 pixel e un'altezza schermo di 1920 pixel. La larghezza è visualizzata correttamente (1080 pixel) ma l'altezza è secondo l'app solo 1776 pixel. Di cosa ho bisogno per fare in modo che l'app visualizzi l'altezza dello schermo corretta? metrics.heightPixels è un brutto modo di ottenere l'altezza dello schermo?

risposta

20

vedere this risposta

se il vostro livello di API> 13 provare questo se siete in attività

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

Se non sei in un'attività è possibile ottenere la visualizzazione di default tramite WINDOW_SERVICE:

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

getWidth e getHeight è per API di livello 13 o meno

UPDATE

Per API 17 e metodo superiore Display.getRealSize() restituisce piena dello schermo, come menzionato in documentation:

Ottiene la dimensione reale del display senza sottrarre qualsiasi arredamento finestra o applicare qualsiasi scala compatibilità fattori.

La dimensione viene regolata in base alla rotazione corrente del display.

La dimensione reale può essere inferiore alla dimensione fisica dello schermo quando il gestore finestre emula uno schermo più piccolo (utilizzando la shell adb sono dimensione schermo).

+1

I tuoi suggerimenti non funzionano come necessario. – lxknvlk

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

avevo bisogno per ottenere il attuale disponibili altezza, e fuori di tutte le opzioni questa è l'unica cosa che ha funzionato per me.

creare un rettangolo, e ottenere le sue dimensioni:

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

dove activityRootView è la vista root del vostro layout.

Se è necessario estrarre l'altezza della barra degli strumenti:

int availableScreenHeight = screenHeight - toolbar.getHeight(); 

dove toolbar è la sua opinione barra degli strumenti.

availableScreenHeight ora sarà senza la barra di stato, senza la barra degli strumenti e senza la barra di navigazione (se il dispositivo lo sta utilizzando).

Problemi correlati