2012-11-19 16 views
5

Sto cercando di ottenere la larghezza e l'altezza effettive dello schermo del Nexus 7 in esecuzione su 4.2.Come ottenere larghezza e altezza grezza del dispositivo o larghezza e altezza effettive dello schermo?

Sto eseguendo alcuni calcoli di runtime basati sulla larghezza e l'altezza del dispositivo per ridimensionare i pulsanti e alcuni elementi dell'interfaccia utente, quindi apparirà corretto in tutti i dispositivi. il mio codice funzionava benissimo in tutti gli SDK 4.1 e successivi ma non funzionava su 4.2.

Sto usando il seguente codice per ottenere larghezza e altezza.

Codice: 1

DisplayMetrics displaymetrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
mWidth = displaymetrics.widthPixels; 
mHeight = displaymetrics.heightPixels; 

Codice: 2

Point size = new Point(); 
WindowManager w = getWindowManager(); 
w.getDefaultDisplay().getSize(size); 
mWidth = size.x; 
mHeight = size.y; 

Ho provato anche con metodi non documentati

Codice: 3

Display display = getWindowManager().getDefaultDisplay(); 
Method mGetRawW = Display.class.getMethod("getRawWidth"); 
Method mGetRawH = Display.class.getMethod("getRawHeight"); 
mWidth = (Integer) mGetRawW.invoke(display); 
mHeight = (Integer) mGetRawH.invoke(display); 

Ma nessuno di cui sopra è lavorando con Nexus 7 runni ng su 4.2, sempre sottraendo l'altezza della barra di stato, non riesco a raggiungere la piena altezza.

ho utilizzato alcuni metodi per calcolare lo stato all'altezza pipistrello, ma non ottenere valori corretti,

int statusBarHeight = Math.ceil(25 * context.getResources().getDisplayMetrics().density); 

E

Rect rectgle= new Rect(); 
Window window= getWindow(); 
window.getDecorView().getWindowVisibleDisplayFrame(rectgle); 
int StatusBarHeight= rectgle.top; 

C'è un modo standard per ottenere dispositivo reale altezza dello schermo e la larghezza?

risposta

1

Provatelo con gli ultimi cambiamenti di API 17:

http://developer.android.com/reference/android/view/Display.html#getRealSize(android.graphics.Point)

public void getRealSize (Point fuori misura)
Ottiene la dimensione reale del display senza sottrarre qualsiasi finestra decor o applicare qualsiasi fattore di scala di compatibilità .

Se questo lavoro does'nt, si può provare:

http://developer.android.com/reference/android/view/Display.html#getRealMetrics(android.util.DisplayMetrics)

+0

Vedere questo codice sorgente demo vi aiuterà a raggiungere ciò che ti piace http://whats-online.info/science-and-tutorials/121/android-get-screen-width- e-altezza di programmazione / –

0
int height = getResources().getDisplayMetrics().heightPixels; 
int width = getResources().getDisplayMetrics().widthPixels; 

altezza rappresenta l'altezza dello schermo del dispositivo in pixel e larghezza rappresenta la larghezza dello schermo del dispositivo in pixel.

0

Prova questo

int width = 0; 
int height =0; 

    Display display = activity.getWindowManager().getDefaultDisplay(); 

    if (Build.VERSION.SDK_INT >= 13) { 
     Point size = new Point(); 
     display.getSize(size); 
     width = size.x; 
     height = size.y; 
    } else { 
     width = display.getWidth(); 
     height = display.getHeight(); 
    } 
Problemi correlati