2012-10-08 3 views
40

So habe ich ein kleines Problem, ich schreibe eine Funktion, die Bildschirmbreite an den Server senden müssen. Ich habe alles zur Arbeit, und ich benutze:Ist es sicher zu verwenden .getWidth auf dem Display, obwohl seine veraltete

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

Breite zu erhalten. Allerdings .getWidht() Funktion ist veraltet und es sagt, u verwenden müssen:

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

Aber diese Funktion ist nur verfügbar für api Level 13 oder mehr, und mein Minimum sdk ist 8. Was kann ich tun? Ist es sicher, wenn ich bei getWidth bleibe? Warum neue Funktionen hinzufügen und nicht rückwärts kompatibel machen?

Antwort

90

dieser Ansatz sein kann wird hilfreich sein:

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

Sie können zur Laufzeit für API-Ebene überprüfen und entscheiden, welche verwendet werden, zB:

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 klingt ok, aber stehlen ist es in Ordnung, wenn ich nur getwidth verwende? – gabrjan

+0

Ja, wenn es bei älteren Versionen nicht verfügbar ist, hast du keine Option. – nmw

+1

können Sie in den meisten Fällen gut mit getWidth() tun. – slezadav

4

Wenn Sie richtig sein wollen, diesen Ansatz verwenden>

  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

Sie vergleichen dort ein int mit einem String (VERSION.RELEASE). – nmw

+3

Wenn Sie richtig sein wollten, würden Sie ein int nicht mit einem String vergleichen und Sie würden das int nicht in einer nicht finalen lokalen Variable speichern, verdammt, Sie brauchen diese Variable nicht einmal, warum speichern Sie sie an erster Stelle. ;) Du willst wohl 'if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.HONEYCOMB_MR2) {' –