martes, 1 de abril de 2014

Como obtengo el alto, ancho y densidad de pantalla de mi dispositivo?

Nos vemos en otro post, con otras funciones que quizás les puedan resultar útiles ;) En este caso, vamos a obtener el ancho y alto de la pantalla donde este corriendo la aplicación en píxeles y ademas vamos a obtener el valor que representa la densidad de pantalla de la misma.



Primero les muestro una simple clase POJO donde voy a almacenar los valores que nos devuelve la función, con los datos de la pantalla.

public class Screen {

    private int altura;
    private int ancho;
    private float densidad;

    public Screen() {
        this.altura = 0;
        this.ancho = 0;
        this.densidad = 0;
    }

    public Screen(int altura, int ancho, float densidad) {
        this.altura = altura;
        this.ancho = ancho;
        this.densidad = densidad;
    }

    public int getAltura() {
        return altura;
    }

    public void setAltura(int altura) {
        this.altura = altura;
    }

    public int getAncho() {
        return ancho;
    }

    public void setAncho(int ancho) {
        this.ancho = ancho;
    }

    public float getDensidad() {
        return densidad;
    }

    public void setDensidad(float densidad) {
        this.densidad = densidad;
    }
}


Y esta es la función que nos va a devolver los datos de la pantalla.

    @SuppressWarnings("deprecation")
    public Screen configScreen(Activity context) {

        // Datos que vamos a terminar devolviendo en el objeto Screen
        float densidad;
        int alto;
        int ancho;

        // Obtenemos el valor que representa la densidad de 
        // pantalla, que es la cantidad de pixeles que representan
        // un dpi, por ejemplo una densidad de pantalla en 
        // Medium DPI es igual a 1
        Resources r = context.getResources();
        densidad = TypedValue.applyDimension(
                                        TypedValue.COMPLEX_UNIT_DIP,
                                        1, r.getDisplayMetrics());

        // Tomamos la pantalla del dispositivo
        Display display = context.
                           getWindowManager().getDefaultDisplay();
        Point size = new Point();

        // Utilizamos uno u otro metodo para tomar el tamaño 
        // de pantalla, dependiendo de la version de android
        if(Build.VERSION.SDK_INT >=
                             Build.VERSION_CODES.HONEYCOMB_MR2){

            display.getSize(size);
            ancho = size.x;
            alto = size.y;
        }
        else {
            // Esto es deprecated, pero es necesario para 
            // versiones anteriores
            ancho = display.getWidth();
            alto = display.getHeight();
        }
        // Creamos y devolvemos el objeto Screen con los datos 
        // que obtuvimos
        return new Screen(alto, ancho, densidad);
    }


Saludos a todos, Gabriel