2012-10-08 9 views
40

Quindi ho un piccolo problema, sto scrivendo una funzione che ha bisogno di inviare la larghezza dello schermo al server. Ho capito tutto per funzionare, e io uso:È sicuro usare .getWidth sul display anche se è deprecato

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 

per ottenere larghezza. Tuttavia .getWidht() è deprecato e si dice u bisogno di usare:

Point size = new Point(); 
display.getSize(size); 

Ma questa funzione è disponibile solo per il livello di API 13 o più, e la mia sdk minimo è di 8. Quindi, cosa posso fare? È sicuro se resto con getWidth? Perché aggiungere nuove funzioni e non renderle compatibili con le versioni precedenti?

risposta

90

Può essere questo approccio sarà utile:

DisplayMetrics displaymetrics = new DisplayMetrics(); 
mContext.getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
int screenWidth = displaymetrics.widthPixels; 
int screenHeight = displaymetrics.heightPixels; 
10

È possibile verificare il livello di API in fase di esecuzione, e scegliere quale utilizzare, ad esempio:

final int version = android.os.Build.VERSION.SDK_INT; 
final int width; 
if (version >= 13) 
{ 
    Point size = new Point(); 
    display.getSize(size); 
    width = size.x; 
} 
else 
{ 
    Display display = getWindowManager().getDefaultDisplay(); 
    width = display.getWidth(); 
} 
+0

hmm suona bene, ma rubare va bene se uso solo getwidth? – gabrjan

+0

Sì, se non è disponibile nelle versioni precedenti, non hai alcuna opzione. – nmw

+1

si può fare abbastanza bene con getWidth() nella maggior parte dei casi. – slezadav

4

Se vuoi essere corretto, utilizzare questo approccio>

  int sdk = android.os.Build.VERSION.SDK_INT; 
      if (sdk < android.os.Build.VERSION.RELEASE) { 
       Display display = getWindowManager().getDefaultDisplay(); 
       int width = display.getWidth(); 

      } else { 
       Point size = new Point(); 
       display.getSize(size); 

      } 
+2

Stai confrontando un int contro una stringa (VERSION.RELEASE) lì. – nmw

+3

Se si desidera essere corretti, non si confronta un int con una stringa e non si memorizzerebbe l'int in una variabile locale non finale, al diavolo non serve nemmeno quella variabile, perché archiviarla al primo posto. ;) Preferisci fare 'if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.HONEYCOMB_MR2) {' –