Una pregunta común entre los desarrolladores de Android sobre el soporte de múltiples pantallas es: ¿Cómo convierto los píxeles a pulgadas? He aquí una manera sencilla de realizar esa tarea.
Una cosa interesante del sistema operativo Android para usuarios y fabricantes de dispositivos es que no hay restricciones en cuanto al tamaño de las pantallas. En un extremo del espectro se encuentran los dispositivos Android con pantallas diminutas como el portátil G Watch; en el otro extremo, los dispositivos en vivo con enormes pantallas, como Galaxy Mega de Samsung. Como desarrolladores, debemos escribir código que pueda jugar bien en ambos extremos y en cualquier lugar entre ellos.
Para ayudar a los desarrolladores en el noble objetivo de escribir código de interfaz de usuario que pueda adaptarse a una miríada de tamaños de pantalla, Google nos ha dotado de herramientas para descubrir el tamaño de la pantalla, la densidad, la orientación, la resolución y la unidad de medida favorita de todos: dp (píxeles independientes de la densidad. Google tiene una guía muy buena (y muy larga) detallada para soportar múltiples pantallas.
Sin embargo, incluso con la orientación oficial de Google, una pregunta común que veo emerger en los foros es: «¿Cómo convierto los píxeles a pulgadas?» La muestra que sigue demuestra una manera fácil de lograr precisamente eso. Puede seguir el tutorial paso a paso, o descargar e importar todo el proyecto directamente a Eclipse.
1. Cree un nuevo proyecto Android en Eclipse. Objetivo SDK 14 (ICS) o superior.
2. Modifique el archivo /res/layout/activity_main.xml para que contenga una vista de texto y un botón, ambos envueltos en una presentación lineal.
activity_main.xml<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_gravity="left|center" android:gravity="center" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:background="#00ff00" android:textColor="#000000" android:text='2"'/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="Scale TextView" android:id="@+id/scale_button" /></LinearLayout>
3. Pasemos al archivo /src/MainActivity.java. Las anulaciones onCreate() y onClick() ya deberían ser familiares para usted – es en el setViewWidthInches() donde estamos realizando el dimensionamiento de nuestra vista. La idea general es obtener los píxeles por pulgada y luego multiplicar este número por nuestro ancho deseado en pulgadas.
MainActivity.javapackage com.authorwjf.twoinches;import android.app.Activity;import android.os.Bundle;import android.util.DisplayMetrics;import android.view.View;import android.view.View.View.OnClickListener;import android.widget.LinearLayout;import android.widget.LinearLayout.LayoutParams; clase pública MainActivity extiende Activity implementa OnClickListener { private static final float TWO_INCHES = 2f; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); findViewById(R.id.scale_button.setOnClickListener(this); } @Override public void onClick(View v) { View textView = findViewById(R.id.text); setViewWidthInches(TWO_INCHES, textView); } private void setViewWidthInches(float inches, View v) { DisplayMetrics metrics = new DisplayMetrics(); getWindowManager(.getDefaultDisplay(.getMetrics(métricas); float mXDpi = métricas.xdpi; int twoInches = Math.round(pulgadas*mXDpi); v.setLayoutParams(new LinearLayout.LayoutParams(twoInches, LayoutParams.WRAP_CONTENT)); v.requestLayout(); }}
La figura A muestra un Nexus 7 real con una regla colocada a lo largo de la vista en cuestión – exactamente 2 pulgadas.
Nota: Algunos desarrolladores han informado de problemas con los emuladores de software Android que devuelven una densidad de pantalla incorrecta; me he topado con esto un par de veces. Ya que el algoritmo que estamos usando para diagramar nuestro ancho de vista depende del conocimiento de la densidad de visualización del dispositivo, recomiendo ejecutar el ejemplo de código anterior sólo en hardware real.