Saltar a contenido

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:

  1. Llama a onDestroy() y destruye la Activity.
  2. Crea una nueva instancia (onCreate()), con la configuración actualizada.
  3. 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:

  1. Persistencia local → para datos grandes o permanentes.

    • Ej.: base de datos, DataStore, ficheros locales.
  2. Objetos retenidos en memoria → para estado de UI mientras la app está activa.

    • Ej.: ViewModel.
  3. Estado de instancia guardada → para datos transitorios que deben sobrevivir a recreaciones.

    • Ej.: onSaveInstanceState(Bundle) para entradas del usuario, navegación, etc.

No te agobies

A lo largo del curso iremos haciendo uso de estas estrategias, de momento que te suenen.