Adaptando los diseños a diferentes configuraciones¶
Interfaces independientes de densidad y resolución¶
Los dispositivos Android varían en:
- Tamaño de pantalla (móvil, tablet, TV, plegables…).
- Densidad de píxeles (ej. 160 dpi vs. 480 dpi en el mismo espacio físico).
Atención
Si usas **píxeles absolutos (px)** en tus diseños, la IU se verá **distorsionada o borrosa**.
Unidades de medida recomendadas¶
-
dp (density-independent pixels) → para medidas de diseño (márgenes, paddings, tamaños).
- 1 dp ≈ 1 px en pantalla de 160 dpi (densidad base).
- Conversión:
px = dp * (dpi / 160)
-
sp (scale-independent pixels) → para tamaños de texto.
- Igual que dp, pero además respeta el ajuste de tamaño de fuente elegido por el usuario.
<!-- Correcto: usar dp para márgenes -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp" />
<!-- Correcto: usar sp para texto -->
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:text="Hola mundo" />
Gráficos y recursos¶
- Evita múltiples versiones de imágenes en diferentes densidades.
-
Usa gráficos vectoriales (
VectorDrawable
en XML):- Escalan sin perder calidad.
- Ideales para iconos e ilustraciones simples.
- No recomendados para fotos.
Sin soporte
Android no soporta directamente SVG → hay que convertirlos a VectorDrawable.
Cambios en la configuración de la interfaz¶
La IU puede verse afectada por cambios en la configuración del dispositivo:
- Orientación (horizontal/vertical).
- Modo multiventana o ventana libre.
- Tamaño/grosor de fuente.
- Configuración regional (idioma).
- Tema oscuro/claro.
- Tamaño de visualización.
- Teclado conectado/desconectado.
- Dispositivos plegables.
Mecanismo de Android: recreación de Activity¶
Cuando ocurre un cambio de configuración, el sistema:
- Llama a
onDestroy()
y destruye la Activity. - Crea una nueva instancia (
onCreate()
), con la configuración actualizada. - Vuelve a cargar la UI con recursos alternativos adecuados.
Info
El estado del usuario debe mantenerse para evitar experiencias frustrantes (ej. perder un formulario al rotar el móvil).
Cómo verificar el estado¶
Para probar que tu app conserva el estado, fuerza cambios de configuración:
- Rotar el dispositivo.
- Entrar en modo multiventana.
- Cambiar tema claro/oscuro.
- Cambiar idioma o tamaño de fuente.
- Conectar/desconectar teclado externo.
Estrategias para preservar el estado¶
Según el tipo de datos que quieras conservar, hay tres enfoques:
-
Persistencia local → para datos grandes o permanentes.
- Ej.: base de datos,
DataStore
, ficheros locales.
- Ej.: base de datos,
-
Objetos retenidos en memoria → para estado de UI mientras la app está activa.
- Ej.:
ViewModel
.
- Ej.:
-
Estado de instancia guardada → para datos transitorios que deben sobrevivir a recreaciones.
- Ej.:
onSaveInstanceState(Bundle)
para entradas del usuario, navegación, etc.
- Ej.:
No te agobies
A lo largo del curso iremos haciendo uso de estas estrategias, de momento que te suenen.