2012-10-08 17 views
40

Tengo un pequeño problema, estoy escribiendo una función que necesita enviar ancho de pantalla al servidor. Lo tengo todo para trabajar, y uso:¿Es seguro usar .getWidth en la pantalla aunque está obsoleto

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

para obtener ancho. Sin embargo .getWidht() función es obsoleto y que dice u necesidad de utilizar:

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

Pero esa función sólo está disponibles, para el nivel de API 13 o más, y mi SDK mínimo es de 8. Entonces, ¿qué puedo hacer? ¿Es seguro si me quedo con getWidth? ¿Por qué agregar nuevas funciones y no hacerlas compatibles con versiones anteriores?

Respuesta

90

Puede ser este enfoque será útil:

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

Puede comprobar si el nivel de la API en tiempo de ejecución, y elegir cuál utilizar, por ejemplo:

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 suena bien, pero ¿está bien si solo uso getwidth? – gabrjan

+0

Sí, si no está disponible en versiones anteriores, entonces no tienes opción. – nmw

+1

puede hacerlo lo suficientemente bien con getWidth() en la mayoría de los casos. – slezadav

4

Si quieres ser correcta, emplee este método>

  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

Está comparando un int contra un String (VERSION.RELEASE) allí. – nmw

+3

Si quiere ser correcto, no compararía un int con un String y no almacenaría el int en una variable local no final, ni siquiera necesita esa variable, por qué almacenarla en el primer lugar. ;) Preferentemente, quieres hacer 'if (Build.VERSION.SDK_INT> = Build.VERSION_CODES.HONEYCOMB_MR2) {' –

Cuestiones relacionadas