2010-05-25 12 views
9

esta es una pregunta realmente simple en la que no he encontrado respuesta:/ ¿Cómo puedo acceder rápidamente a la resolución de pantalla (ancho, alto) como valores enteros?Android: Obtenga la resolución de pantalla/píxeles como valores enteros

He tratado de éste, pero siempre muestra cero en mi emulador:

DisplayMetrics dm = new DisplayMetrics(); 
int width = dm.widthPixels/2; 

En mi caso quiero para crear dinámicamente una tabla con filastabla, cada uno con dos cols. Este cols todo llenará la mitad de la pantalla en ancho.

¿Alguien me puede dar una pista?

+0

sólo una suposición - los valores recuperados de DisplayMetrics pueden no ser válidos hasta el primer sorteo. ¿Estás marcando esto en onCreate o onDraw o cuando? – SteelBytes

+0

La verdadera razón por la cual el resultado fue cero es porque cero es el valor predeterminado en java para un int. 'dm.widthPixels' no se inicializó, por lo que su valor es cero y cero dividido por dos también es cero ... deberías haber intentado algo como' mView.getContext(). getResources(). getDisplayMetrics() ' – Armin

Respuesta

3

La manera más fácil será implementar onSizeChanged. Probablemente obtengas un valor de 0 porque la vista aún no se ha inicializado. No puede llamar al código anterior en el constructor de View, por ejemplo.

+0

¿Qué significa esto? significa para mí, cuando dinámicamente quiero agregar TableRows y después de finalizar agrego la tabla al LinearLayout principal y configuro este en ContentView (usando this.setContentView (ll), donde ll es mi linearLayout? – poeschlorn

+0

onSizeChanged se llamará el primero vez que se dibuja su Vista y siempre que cambie la orientación. Cuando se llame, almacene las dimensiones de la pantalla en miembros de sus clases. Use estos valores cuando dibuje (en el método OnDraw). – kgiannakakis

+0

gracias, voy a intentarlo esto :) – poeschlorn

17

Puede obtener métricas de pantalla de esta manera:

Display d = ((WindowManager)getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 
int width = d.getWidth(); 
int height = d.getHeight(); 
+3

esto debería marcarse como la respuesta correcta – emaillenin

+1

Aparece una advertencia @deprecated, sin más explicaciones. utilizó la respuesta de Guillaume Perrot en su lugar – Moak

+0

@Moak, que estaba en desuso desde la API de Android 13. Consulte [docs] (http://developer.android.com/reference/android/view/Display.html # getWidth% 28% 29). –

4

utilizo el siguiente:

int scrWidth = getWindowManager().getDefaultDisplay().getWidth(); 
int scrHeight = getWindowManager().getDefaultDisplay().getHeight(); 

No muss, ninguna queja, sólo 2 variables de clase

32

La respuesta trashkalmar es correcto.

Sin embargo, los resultados serán específicos para el contexto de la actividad. Si desea la resolución de pantalla completa del dispositivo:

DisplayMetrics displayMetrics = new DisplayMetrics(); 
WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut 
wm.getDefaultDisplay().getMetrics(displayMetrics); 
int screenWidth = displayMetrics.widthPixels; 
int screenHeight = displayMetrics.heightPixels; 

Tenga en cuenta que los resultados también dependen de la orientación actual del dispositivo.

+0

¡Perfecto! ... ... ... ... –

5

1.Simplemente use Esta actividad interior para obtener píxeles de ancho y alto de pantalla.

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay() 
    .getMetrics(metrics); 
int width = metrics.widthPixels; 
int height = metrics.heightPixels; 

2. Este también se puede usar, pero requiere nivel Api inline comprobar

Display display = getWindowManager().getDefaultDisplay(); 

Point size = new Point(); 
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 
    display.getSize(size); 
    int width2 = size.x; 
    int height2 = size.y; 

} else { 
    int width2 = display.getWidth(); 
    int height2 = display.getHeight(); 
} 

3.Use esto cuando usted no está en actividad, pero teniendo contexto

WindowManager wm = (WindowManager) context.getSystemService(
      Context.WINDOW_SERVICE); 
Display display1 = wm.getDefaultDisplay(); 
Point size1 = new Point(); 

int width1; 
int height1; 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { 

    display1.getSize(size1); 
    width1 = size1.x; 
    height1 = size1.y; 

} else { 
    width2 = display.getWidth(); 
    height2 = display.getHeight(); 
} 
Cuestiones relacionadas