Le développement d'interface d'application mobile commence par la compréhension des composants et frameworks UI. Cet article couvre Material Design, Human Interface Guidelines, SwiftUI, Jetpack Compose, Flutter Widgets, le système d'unités de mesure (dp, sp, pt, px) et tous les éléments clés de l'UI — de NavigationView et RecyclerView à Safe Area et Dark Mode. Le matériel est destiné aux débutants qui passent de la théorie à leurs premiers projets. Pour plus de détails, consultez la documentation officielle de Material Design.
Points clés
Chaque plateforme propose son propre ensemble de règles et de composants. Pour Android, c'est Material Design, développé par Google en 2014. Material Design utilise la métaphore du matériau physique — couches, ombres (Elevation), transitions animées et mises en page adaptatives. Les principes clés incluent la hiérarchie par élévation, le mouvement significatif et l'adaptabilité à différents facteurs de forme. Nous recommandons d'explorer Material Design 3 (Material You) — la dernière version avec thème dynamique et couleurs personnalisées.
Apple propose les Human Interface Guidelines (HIG) — un ensemble de règles pour iOS, iPadOS, macOS, watchOS et tvOS. Les HIG mettent l'accent sur une typographie claire (San Francisco), Safe Area pour prendre en compte le Notch et Dynamic Island, la navigation gestuelle et la cohérence. Contrairement à Material Design, les HIG n'utilisent pas de « couches » ni d'Elevation — elles utilisent plutôt le flou (vibrancy), les ombres et les séparateurs subtils. La documentation complète des HIG est régulièrement mise à jour avec les nouvelles versions d'iOS.
Chez IT Sectr, nous utilisons les deux systèmes de conception selon la plateforme du client. Pour les projets multiplateformes Flutter, nous développons un système de conception unifié combinant les meilleures pratiques de Material Design et des HIG. Cette approche préserve une UX native sur chaque plateforme sans duplication de code.
L'approche traditionnelle de construction d'UI est la mise en page impérative via XML (Android) ou Interface Builder / code (iOS). L'alternative moderne est les frameworks déclaratifs, où le développeur décrit à quoi l'interface doit ressembler dans chaque état, et le framework gère les mises à jour.
Jetpack Compose est une boîte à outils moderne de Google pour construire une UI native en Kotlin. Au lieu de mises en page XML, des fonctions composables Kotlin (@Composable) sont utilisées. Compose est entièrement déclaratif : lorsque les données changent, seules les parties modifiées de l'écran sont redessinées. Exemple d'un écran simple avec du texte et un bouton :
@Composable
fun GreetingScreen() {
var count = remember { mutableStateOf(0) }
Column {
Text(text = "Нажато: $count")
Button(onClick = { count++ }) {
Text("Нажми меня")
}
}
}
SwiftUI est le framework déclaratif d'Apple présenté en 2019. Il fonctionne sur toutes les plateformes Apple (iOS, iPadOS, macOS, watchOS, tvOS) via une API unifiée. SwiftUI utilise des structures View, des propriétés @State et @Binding pour la gestion des données et des modificateurs pour le style. L'équivalent de l'exemple ci-dessus en SwiftUI :
struct GreetingView: View {
@State private var count = 0
var body: some View {
VStack {
Text("Нажато: \(count)")
Button("Нажми меня") {
count += 1
}
}
}
}
Flutter de Google utilise sa propre bibliothèque de widgets. Tout dans Flutter est un widget — du padding à un écran entier. Les widgets sont divisés en StatelessWidget (immuables) et StatefulWidget (avec état). Les conteneurs de base sont Container, Row, Column, Stack. Flutter n'utilise pas de composants natifs de la plateforme — il dessine tout via Skia Engine, garantissant une apparence cohérente sur Android et iOS.
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('Нажми меня'),
),
],
);
}
}
Malgré la prolifération des frameworks déclaratifs, comprendre les composants natifs reste important pour la prise en charge des projets hérités et la personnalisation avancée.
La navigation sous Android est basée sur Activity (écrans d'activité) et Fragment (fragments dans une même Activity). Jetpack Navigation Component simplifie les transitions entre les écrans via un graphe de navigation. Sous iOS, la navigation est implémentée via NavigationController — une pile de contrôleurs avec des transitions animées. Tab Bar et Bottom Navigation permettent de basculer entre les sections principales de l'application. Drawer (menu latéral) et Toolbar/ActionBar sont utilisés pour les actions supplémentaires. Android Navigation Component est recommandé pour tous les nouveaux projets.
Pour afficher de grandes quantités de données, Android utilise RecyclerView — un conteneur efficace avec réutilisation des ViewHolder. Les équivalents iOS sont UITableView (listes verticales) et UICollectionView (grilles). Jetpack Compose propose LazyColumn et LazyVerticalGrid, tandis que SwiftUI fournit List et LazyVStack/LazyHStack. L'avantage clé des composants Lazy est le rendu uniquement des éléments visibles.
| Plateforme | Composant de liste | Composant de grille | Chargement paresseux |
|---|---|---|---|
| Android (View System) | RecyclerView + ListView | RecyclerView GridLayoutManager | Oui |
| Android (Compose) | LazyColumn | LazyVerticalGrid | Oui |
| iOS (UIKit) | UITableView | UICollectionView | Oui |
| iOS (SwiftUI) | List / LazyVStack | LazyVGrid | Oui |
| Flutter | ListView.builder | GridView.builder | Oui |
Le système de vues Android propose plusieurs conteneurs de mise en page : ConstraintLayout (système de contraintes flexible), LinearLayout (disposition linéaire), RelativeLayout (positionnement relatif), FrameLayout (superposition de couches). Sous iOS, Core Auto Layout utilise un système de contraintes (NSLayoutConstraint) pour décrire le positionnement des éléments. SwiftUI et Flutter utilisent respectivement VStack/HStack/ZStack et Row/Column/Stack.
Les composants d'UI des appareils mobiles sont affichés en tenant compte des différentes densités de pixels. Pour que l'interface soit identique sur tous les écrans, des unités indépendantes de la densité sont utilisées.
| Unité | Plateforme | Description |
|---|---|---|
| dp | Android | Pixels indépendants de la densité — unité abstraite égale à 1px sur un écran mdpi |
| sp | Android | Pixels indépendants de l'échelle — pour les polices, respecte les paramètres de taille de police de l'utilisateur |
| pt | iOS | Points — unité typographique, 1pt = 1px sur un écran 1x (non Retina) |
| px | Toutes | Pixels physiques de l'écran — non recommandé pour la mise en page en raison de la densité variable |
Les densités d'écran sont classées comme suit : mdpi (160 dpi, 1x), hdpi (240 dpi, 1.5x), xhdpi (320 dpi, 2x), xxhdpi (480 dpi, 3x), xxxhdpi (640 dpi, 4x). Lors de la préparation des images, vous devez créer des ressources pour toutes les densités : icon.png, icon_hdpi.png, icon_xhdpi.png, etc. Les formats vectoriels (VectorDrawable sur Android, SF Symbols sur iOS) résolvent le problème des multiples ressources raster.
Chez IT Sectr, nous utilisons un facteur d'échelle pour exporter les icônes depuis Figma : nous exportons en 1x, 2x, 3x pour iOS et mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi pour Android. Cela garantit un affichage net sur tous les appareils, y compris les tablettes et les smartphones pliables.
Les composants d'UI d'applications mobiles modernes doivent prendre en charge un certain nombre de normes, sans lesquelles l'expérience utilisateur serait incomplète.
Mode sombre est une option obligatoire dans les applications modernes. Material Design 3 et iOS 13+ offrent une prise en charge intégrée du thème sombre. Il est important de ne pas inverser les couleurs, mais d'utiliser des palettes de couleurs séparées : fond sombre, texte clair, contraste réduit pour les éléments secondaires. Le basculement automatique peut être lié au thème système de l'appareil.
Les iPhones modernes ont un Notch (découpe pour la caméra frontale) et Dynamic Island. Les appareils Android ont également des découpes et des coins arrondis (Corner Radius). Safe Area est la zone de l'écran garantie exempte d'éléments système (barre d'état, indicateur d'accueil), de barre de navigation et de découpes. iOS applique automatiquement Safe Area Insets ; Android nécessite une vérification explicite via WindowInsets ou DisplayCutout.
L'accessibilité garantit l'utilisabilité de l'application pour les personnes handicapées. Exigences clés : prise en charge de TalkBack (Android) et VoiceOver (iOS), contentDescription correct pour ImageView, contraste de couleur suffisant (minimum 4.5:1 pour le texte), prise en charge de Dynamic Type (iOS) pour le redimensionnement des polices, navigation sans vision et alternatives aux gestes. WCAG 2.1 est la norme internationale d'accessibilité.
L'internationalisation (i18n) est la préparation de l'application à prendre en charge plusieurs langues et formats régionaux. La localisation (l10n) est la traduction des chaînes, des dates, des devises et des spécificités culturelles. Android utilise des répertoires de ressources (values-ru, values-de), iOS utilise Localizable.strings et XLIFF. Flutter prend en charge flutter_localizations avec des fichiers de traduction ARB.
L'interaction tactile comprend de nombreux gestes : Tap (toucher), Long Press (appui long), Swipe (balayage), Pinch-to-Zoom (pincer pour zoomer), Pull-to-Refresh (tirer pour actualiser), Drag-and-Drop (glisser-déposer). Android utilise GestureDetector, iOS utilise UIGestureRecognizer. iOS prend également en charge 3D Touch (Force Touch) et Haptic Touch avec retour haptique via le Taptic Engine.
Foire aux questions
Material Design (Google) utilise une métaphore « matérielle » avec ombres, couches et transitions animées, tandis que les HIG (Apple) reposent sur la clarté, Safe Area et Dynamic Type. Material Design est recommandé pour Android, les HIG pour iOS. Le choix du système de conception affecte également la navigation : Android privilégie Bottom Navigation et Navigation Drawer, tandis qu'iOS privilégie Tab Bar et Navigation Controller.
Jetpack Compose est un framework déclaratif pour Android, SwiftUI pour iOS. Les deux utilisent une approche déclarative et simplifient le développement d'UI. Compose est plus étroitement intégré à Kotlin et Android Architecture Components, SwiftUI à Combine et à tout l'écosystème Apple.
Le design responsive est une approche où l'interface s'adapte à la taille de l'écran, à l'orientation et à la densité de pixels. Des unités relatives (dp, sp, pt), Auto Layout ou ConstraintLayout sont utilisés. Les tablettes, les appareils pliables et les fenêtres de bureau (iPad Stage Manager) nécessitent des adaptations supplémentaires : Split View, mise en page maître-détail.
dp (pixels indépendants de la densité) et sp (pixels indépendants de l'échelle) sur Android, pt (points) sur iOS. px sont des pixels physiques. dp et pt fournissent la même taille physique sur différentes densités d'écran : mdpi (1x), hdpi (1.5x), xhdpi (2x), xxhdpi (3x), xxxhdpi (4x).
L'accessibilité rend l'interface utilisable pour les personnes handicapées : prise en charge des lecteurs d'écran, texte large, contraste. Sans a11y, une application ne sera pas acceptée pour publication sur l'App Store ou Google Play. De plus, l'accessibilité améliore l'UX pour tous les utilisateurs — par exemple, la prise en charge de Dynamic Type aide les personnes malvoyantes.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.