UI/UX y componentes en el desarrollo móvil: qué son, tipos y cómo usarlos

Autor: IT Sectr Publicado: 2026-02-23 Tiempo de lectura: 11 min

El desarrollo de la interfaz de una aplicación móvil comienza con la comprensión de los componentes UI y los frameworks. Este artículo cubre Material Design, Human Interface Guidelines, SwiftUI, Jetpack Compose, Flutter Widgets, el sistema de unidades de medida (dp, sp, pt, px) y todos los elementos clave de la UI — desde NavigationView y RecyclerView hasta Safe Area y Dark Mode. El material está dirigido a principiantes que pasan de la teoría a sus primeros proyectos. Para más detalles, consulte la documentación oficial de Material Design.

Puntos clave

  • Material Design (Google) y Human Interface Guidelines (Apple) son los dos sistemas de diseño principales para plataformas móviles
  • Los frameworks declarativos SwiftUI y Jetpack Compose reemplazan los clásicos UIView y diseños XML
  • Flutter utiliza su propia biblioteca Widgets — todo, desde texto hasta animación, es un widget
  • Las unidades dp, sp y pt garantizan una visualización correcta en pantallas con diferentes densidades (mdpi–xxxhdpi)
  • Accesibilidad (a11y) e internacionalización (i18n) son requisitos obligatorios para publicar en tiendas de aplicaciones

Sistemas de diseño: Material Design y Human Interface Guidelines

Cada plataforma ofrece su propio conjunto de reglas y componentes. Para Android, esto es Material Design, desarrollado por Google en 2014. Material Design utiliza la metáfora del material físico — capas, sombras (Elevation), transiciones animadas y diseños adaptativos. Los principios clave incluyen jerarquía mediante elevación, movimiento significativo y adaptabilidad a diferentes factores de forma. Recomendamos explorar Material Design 3 (Material You) — la última versión con tema dinámico y colores personalizados.

Apple ofrece Human Interface Guidelines (HIG) — un conjunto de reglas para iOS, iPadOS, macOS, watchOS y tvOS. HIG enfatiza la tipografía clara (San Francisco), Safe Area para tener en cuenta el Notch y Dynamic Island, navegación basada en gestos y consistencia. A diferencia de Material Design, HIG no usa "capas" ni Elevation — en su lugar, utiliza desenfoque (vibrancy), sombras y separadores sutiles. La documentación completa de HIG se actualiza regularmente con nuevas versiones de iOS.

En IT Sectr, utilizamos ambos sistemas de diseño según la plataforma del cliente. Para proyectos multiplataforma con Flutter, desarrollamos un sistema de diseño unificado que combina las mejores prácticas de Material Design y HIG. Este enfoque preserva una UX nativa en cada plataforma sin duplicación de código.

Frameworks declarativos de UI: SwiftUI y Jetpack Compose

El enfoque tradicional para construir UI es el diseño imperativo mediante XML (Android) o Interface Builder / código (iOS). La alternativa moderna son los frameworks declarativos, donde el desarrollador describe cómo debe verse la interfaz en cada estado, y el framework se encarga de las actualizaciones.

Jetpack Compose (Android)

Jetpack Compose es un toolkit moderno de Google para construir UI nativa en Kotlin. En lugar de diseños XML, se utilizan funciones componibles de Kotlin (@Composable). Compose es completamente declarativo: cuando los datos cambian, solo se redibujan las partes modificadas de la pantalla. Ejemplo de una pantalla simple con texto y un botón:

kotlin
@Composable
fun GreetingScreen() {
    var count = remember { mutableStateOf(0) }
    Column {
        Text(text = "Нажато: $count")
        Button(onClick = { count++ }) {
            Text("Нажми меня")
        }
    }
}

SwiftUI (iOS)

SwiftUI es el framework declarativo de Apple presentado en 2019. Funciona en todas las plataformas Apple (iOS, iPadOS, macOS, watchOS, tvOS) a través de una API unificada. SwiftUI utiliza estructuras View, propiedades @State y @Binding para la gestión de datos, y modificadores para el estilo. El equivalente del ejemplo anterior en SwiftUI:

swift
struct GreetingView: View {
    @State private var count = 0
    var body: some View {
        VStack {
            Text("Нажато: \(count)")
            Button("Нажми меня") {
                count += 1
            }
        }
    }
}

Flutter Widgets

Flutter de Google utiliza su propia biblioteca de widgets. Todo en Flutter es un widget — desde el padding hasta una pantalla completa. Los widgets se dividen en StatelessWidget (inmutables) y StatefulWidget (con estado). Los contenedores básicos son Container, Row, Column, Stack. Flutter no utiliza componentes nativos de la plataforma — dibuja todo a través de Skia Engine, lo que garantiza una apariencia consistente tanto en Android como en iOS.

dart
class GreetingWidget extends StatefulWidget {
    @override
    State createState() => _GreetingWidgetState();
}
class _GreetingWidgetState extends State<GreetingWidget> {
    int count = 0;
    @override
    Widget build(BuildContext context) {
        return Column(
            children: [
                Text('Нажато: $count'),
                ElevatedButton(
                    onPressed: () => setState(() => count++),
                    child: Text('Нажми меня'),
                ),
            ],
        );
    }
}

Componentes nativos de UI para Android y iOS

A pesar de la expansión de los frameworks declarativos, comprender los componentes nativos sigue siendo importante para mantener proyectos heredados y realizar personalizaciones profundas.

Navegación

La navegación en Android se basa en Activity (pantallas de actividad) y Fragment (fragmentos dentro de una Activity). Jetpack Navigation Component simplifica las transiciones entre pantallas mediante un grafo de navegación. En iOS, la navegación se implementa a través de NavigationController — una pila de controladores con transiciones animadas. Tab Bar y Bottom Navigation permiten cambiar entre las secciones principales de la aplicación. Drawer (menú lateral) y Toolbar/ActionBar se utilizan para acciones adicionales. Android Navigation Component se recomienda para todos los proyectos nuevos.

Listas

Para mostrar grandes cantidades de datos, Android utiliza RecyclerView — un contenedor eficiente con reutilización de ViewHolder. Los equivalentes en iOS son UITableView (listas verticales) y UICollectionView (cuadrículas). Jetpack Compose ofrece LazyColumn y LazyVerticalGrid, mientras que SwiftUI proporciona List y LazyVStack/LazyHStack. La ventaja clave de los componentes Lazy es que renderizan solo los elementos visibles.

Plataforma Componente de lista Componente de cuadrícula Carga diferida
Android (View System)RecyclerView + ListViewRecyclerView GridLayoutManager
Android (Compose)LazyColumnLazyVerticalGrid
iOS (UIKit)UITableViewUICollectionView
iOS (SwiftUI)List / LazyVStackLazyVGrid
FlutterListView.builderGridView.builder

Diseños y posicionamiento

El sistema de vistas de Android ofrece varios contenedores de diseño: ConstraintLayout (sistema flexible de restricciones), LinearLayout (disposición lineal), RelativeLayout (posicionamiento relativo), FrameLayout (superposición de capas). En iOS, Core Auto Layout utiliza un sistema de restricciones (NSLayoutConstraint) para describir la posición de los elementos. SwiftUI y Flutter utilizan VStack/HStack/ZStack y Row/Column/Stack respectivamente.

Unidades de medida y diseño responsive

Los componentes de UI de dispositivos móviles se muestran teniendo en cuenta diferentes densidades de píxeles. Para que la interfaz se vea igual en todas las pantallas, se utilizan unidades independientes de densidad.

Unidad Plataforma Descripción
dpAndroidDensity-independent Pixels — unidad abstracta equivalente a 1px en una pantalla mdpi
spAndroidScale-independent Pixels — para fuentes, respeta la configuración de tamaño de texto del usuario
ptiOSPoints — unidad tipográfica, 1pt = 1px en una pantalla 1x (no Retina)
pxTodasPíxeles físicos de la pantalla — no recomendado para diseño debido a la densidad variable

Las densidades de pantalla se clasifican como: mdpi (160 dpi, 1x), hdpi (240 dpi, 1.5x), xhdpi (320 dpi, 2x), xxhdpi (480 dpi, 3x), xxxhdpi (640 dpi, 4x). Al preparar imágenes, debe crear recursos para todas las densidades: icon.png, icon_hdpi.png, icon_xhdpi.png, etc. Los formatos vectoriales (VectorDrawable en Android, SF Symbols en iOS) resuelven el problema de múltiples recursos rasterizados.

En IT Sectr, utilizamos un factor de escala para exportar iconos desde Figma: exportamos a 1x, 2x, 3x para iOS y mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi para Android. Esto garantiza una visualización nítida en todos los dispositivos, incluidas tabletas y teléfonos plegables.

Conceptos modernos de UI: Dark Mode, Safe Area, Accesibilidad

Los componentes de UI de aplicaciones móviles modernas deben admitir una serie de estándares, sin los cuales la experiencia del usuario sería incompleta.

Dark Mode / Light Mode

Dark Mode (modo oscuro) es una opción obligatoria en las aplicaciones modernas. Material Design 3 e iOS 13+ ofrecen soporte integrado para el tema oscuro. Es importante no invertir los colores, sino usar paletas de colores separadas: fondo oscuro, texto claro, contraste reducido para elementos secundarios. El cambio automático se puede vincular al tema del sistema del dispositivo.

Safe Area y soporte para Notch / Dynamic Island

Los iPhones modernos tienen un Notch (recorte para la cámara frontal) y Dynamic Island. Los dispositivos Android también tienen recortes y esquinas redondeadas (Corner Radius). Safe Area es el área de la pantalla que está garantizada libre de elementos del sistema (barra de estado, indicador de inicio), barra de navegación y recortes. iOS aplica automáticamente Safe Area Insets; Android requiere verificación explícita mediante WindowInsets o DisplayCutout.

Accesibilidad (a11y)

Accesibilidad garantiza que la aplicación sea utilizable por personas con discapacidades. Requisitos clave: soporte para TalkBack (Android) y VoiceOver (iOS), contentDescription correcto para ImageView, contraste de color suficiente (mínimo 4.5:1 para texto), soporte de Dynamic Type (iOS) para escalado de fuentes, navegación sin visión y alternativas a gestos. WCAG 2.1 es el estándar internacional de accesibilidad.

Globalización y localización (i18n / l10n)

Internacionalización (i18n) es preparar la aplicación para admitir múltiples idiomas y formatos regionales. Localización (l10n) es traducir cadenas, fechas, monedas y características culturales. Android utiliza directorios de recursos (values-ru, values-de), iOS utiliza Localizable.strings y XLIFF. Flutter admite flutter_localizations con archivos de traducción ARB.

Gestos e interacción

La interacción táctil incluye muchos gestos: Tap (toque), Long Press (pulsación larga), Swipe (deslizar), Pinch-to-Zoom (pellizcar para ampliar), Pull-to-Refresh (deslizar para actualizar), Drag-and-Drop (arrastrar y soltar). Android utiliza GestureDetector, iOS utiliza UIGestureRecognizer. iOS también admite 3D Touch (Force Touch) y Haptic Touch con retroalimentación háptica a través del Taptic Engine.

Preguntas frecuentes

¿Cuál es la diferencia entre Material Design y Human Interface Guidelines?

Material Design (Google) utiliza una metáfora "material" con sombras, capas y transiciones animadas, mientras que HIG (Apple) se basa en claridad, Safe Area y Dynamic Type. Material Design se recomienda para Android, HIG para iOS. La elección del sistema de diseño también afecta la navegación: Android favorece Bottom Navigation y Navigation Drawer, mientras que iOS favorece Tab Bar y Navigation Controller.

¿Qué elegir: Jetpack Compose o SwiftUI?

Jetpack Compose es un framework declarativo para Android, SwiftUI es para iOS. Ambos utilizan un enfoque declarativo y simplifican el desarrollo de UI. Compose está más integrado con Kotlin y Android Architecture Components, SwiftUI con Combine y todo el ecosistema Apple.

¿Qué es el diseño responsive en aplicaciones móviles?

El diseño responsive es un enfoque donde la interfaz se adapta al tamaño de la pantalla, la orientación y la densidad de píxeles. Se utilizan unidades relativas (dp, sp, pt), Auto Layout o ConstraintLayout. Las tabletas, dispositivos plegables y ventanas de escritorio (iPad Stage Manager) requieren adaptaciones adicionales: Split View, diseño maestro-detalle.

¿Qué unidades de medida se utilizan en la UI móvil?

dp (density-independent pixels) y sp (scale-independent pixels) en Android, pt (points) en iOS. px son píxeles físicos. dp y pt proporcionan el mismo tamaño físico en diferentes densidades de pantalla: mdpi (1x), hdpi (1.5x), xhdpi (2x), xxhdpi (3x), xxxhdpi (4x).

¿Qué es la accesibilidad (a11y) y por qué es importante?

La accesibilidad hace que la interfaz sea utilizable para personas con discapacidades: soporte de lectores de pantalla, texto grande, contraste. Sin a11y, una aplicación no será aceptada para su publicación en App Store o Google Play. Además, la accesibilidad mejora la UX para todos los usuarios — por ejemplo, el soporte de Dynamic Type ayuda a personas con baja visión.

Resumen

  • Material Design (Android) y Human Interface Guidelines (iOS) son esenciales para cualquier desarrollador móvil
  • Los frameworks declarativos SwiftUI y Jetpack Compose son el estándar para nuevos proyectos
  • Los componentes nativos (RecyclerView, UITableView, NavigationView) siguen siendo relevantes para el soporte heredado
  • Las unidades dp / sp / pt garantizan una visualización correcta en todas las densidades de pantalla
  • Safe Area, Dark Mode y Accesibilidad son requisitos obligatorios para aplicaciones modernas
  • Flutter Widgets y las soluciones multiplataforma requieren conocimiento de ambas plataformas
  • El control por gestos (swipe, pinch-to-zoom, pull-to-refresh) es una parte integral de la UX móvil

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto