UI/UX i komponenty w rozwoju mobilnym: czym są, rodzaje i jak używać

Autor: IT Sectr Opublikowano: 2026-02-23 Czas czytania: 11 min

Tworzenie interfejsu aplikacji mobilnej zaczyna się od zrozumienia komponentów i frameworków UI. Ten artykuł obejmuje Material Design, Human Interface Guidelines, SwiftUI, Jetpack Compose, Flutter Widgets, system jednostek miary (dp, sp, pt, px) oraz wszystkie kluczowe elementy UI — od NavigationView i RecyclerView po Safe Area i Dark Mode. Materiał jest przeznaczony dla początkujących przechodzących od teorii do pierwszych projektów. Więcej szczegółów znajdziesz w oficjalnej dokumentacji Material Design.

Najważniejsze punkty

  • Material Design (Google) i Human Interface Guidelines (Apple) to dwa główne systemy projektowe dla platform mobilnych
  • Frameworki deklaratywne SwiftUI i Jetpack Compose zastępują klasyczne UIView i układy XML
  • Flutter używa własnej biblioteki Widgets — wszystko od tekstu po animację jest widgetem
  • Jednostki dp, sp i pt zapewniają poprawne wyświetlanie na ekranach o różnej gęstości (mdpi–xxxhdpi)
  • Dostępność (a11y) i internacjonalizacja (i18n) to obowiązkowe wymagania do publikacji w sklepach z aplikacjami

Systemy projektowe: Material Design i Human Interface Guidelines

Każda platforma oferuje własny zestaw reguł i komponentów. Dla Androida jest to Material Design, opracowany przez Google w 2014 roku. Material Design wykorzystuje metaforę fizycznego materiału — warstwy, cienie (Elevation), animowane przejścia i adaptacyjne układy. Kluczowe zasady obejmują hierarchię poprzez wyniesienie, znaczący ruch i dostosowywalność do różnych czynników kształtu. Zalecamy zapoznanie się z Material Design 3 (Material You) — najnowszą wersją z dynamicznym motywem i spersonalizowanymi kolorami.

Apple oferuje Human Interface Guidelines (HIG) — zestaw reguł dla iOS, iPadOS, macOS, watchOS i tvOS. HIG kładzie nacisk na czystą typografię (San Francisco), Safe Area uwzględniającą Notch i Dynamic Island, nawigację opartą na gestach i spójność. W przeciwieństwie do Material Design, HIG nie używa „warstw" i Elevation — zamiast tego stosuje rozmycie (vibrancy), cienie i subtelne separatory. Pełna dokumentacja HIG jest regularnie aktualizowana wraz z nowymi wersjami iOS.

W IT Sectr używamy obu systemów projektowych w zależności od platformy klienta. Dla wieloplatformowych projektów Flutter opracowujemy ujednolicony system projektowy łączący najlepsze praktyki Material Design i HIG. Takie podejście pozwala zachować natywne UX na każdej platformie bez powielania kodu.

Deklaratywne frameworki UI: SwiftUI i Jetpack Compose

Tradycyjne podejście do budowania UI to imperatywny układ poprzez XML (Android) lub Interface Builder / kod (iOS). Nowoczesną alternatywą są frameworki deklaratywne, gdzie programista opisuje, jak interfejs powinien wyglądać w każdym stanie, a framework zajmuje się aktualizacjami.

Jetpack Compose (Android)

Jetpack Compose to nowoczesny zestaw narzędzi od Google do budowania natywnego UI w Kotlinie. Zamiast układów XML używane są funkcie komponowalne Kotlina (@Composable). Compose jest w pełni deklaratywny: gdy dane się zmieniają, przerysowywane są tylko zmienione części ekranu. Przykład prostego ekranu z tekstem i przyciskiem:

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

SwiftUI (iOS)

SwiftUI to deklaratywny framework Apple wprowadzony w 2019 roku. Działa na wszystkich platformach Apple (iOS, iPadOS, macOS, watchOS, tvOS) poprzez ujednolicone API. SwiftUI używa struktur View, właściwości @State i @Binding do zarządzania danymi oraz modyfikatorów do stylizacji. Odpowiednik powyższego przykładu w SwiftUI:

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

Flutter Widgets

Flutter od Google używa własnej biblioteki widgetów. Wszystko we Flutterze jest widgetem — od paddingu po cały ekran. Widgety dzielą się na StatelessWidget (niezmienne) i StatefulWidget (ze stanem). Podstawowe kontenery to Container, Row, Column, Stack. Flutter nie używa natywnych komponentów platformy — rysuje wszystko przez Skia Engine, co zapewnia spójny wygląd na Androidzie i 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('Нажми меня'),
                ),
            ],
        );
    }
}

Natywne komponenty UI dla Androida i iOS

Pomimo rozpowszechnienia frameworków deklaratywnych, zrozumienie natywnych komponentów pozostaje ważne dla obsługi starszych projektów i głębokiej personalizacji.

Nawigacja

Nawigacja w Androidzie opiera się na Activity (ekrany aktywności) i Fragment (fragmenty wewnątrz jednej Activity). Jetpack Navigation Component upraszcza przejścia między ekranami poprzez graf nawigacji. W iOS nawigacja jest implementowana przez NavigationController — stos kontrolerów z animowanymi przejściami. Tab Bar i Bottom Navigation umożliwiają przełączanie między głównymi sekcjami aplikacji. Drawer (boczne menu) i Toolbar/ActionBar są używane do dodatkowych działań. Android Navigation Component jest zalecany dla wszystkich nowych projektów.

Listy

Do wyświetlania dużych ilości danych Android używa RecyclerView — wydajnego kontenera z ponownym wykorzystaniem ViewHolder. Odpowiednikami w iOS są UITableView (listy pionowe) i UICollectionView (siatki). Jetpack Compose oferuje LazyColumn i LazyVerticalGrid, a SwiftUI — List i LazyVStack/LazyHStack. Kluczową zaletą komponentów Lazy jest renderowanie tylko widocznych elementów.

Platforma Komponent listy Komponent siatki Lenive ładowanie
Android (View System)RecyclerView + ListViewRecyclerView GridLayoutManagerTak
Android (Compose)LazyColumnLazyVerticalGridTak
iOS (UIKit)UITableViewUICollectionViewTak
iOS (SwiftUI)List / LazyVStackLazyVGridTak
FlutterListView.builderGridView.builderTak

Układy i pozycjonowanie

Android View System oferuje kilka kontenerów układu: ConstraintLayout (elastyczny system więzów), LinearLayout (układ liniowy), RelativeLayout (pozycjonowanie względne), FrameLayout (nakładanie warstw). W iOS, Core Auto Layout używa systemu więzów (NSLayoutConstraint) do opisu pozycjonowania elementów. SwiftUI i Flutter używają odpowiednio VStack/HStack/ZStack i Row/Column/Stack.

Jednostki miary i responsywny układ

Komponenty UI urządzeń mobilnych są wyświetlane z uwzględnieniem różnych gęstości pikseli. Aby interfejs wyglądał tak samo na wszystkich ekranach, używa się jednostek niezależnych od gęstości.

Jednostka Platforma Opis
dpAndroidPiksele niezależne od gęstości — abstrakcyjna jednostka równa 1px na ekranie mdpi
spAndroidPiksele niezależne od skali — dla czcionek, uwzględnia ustawienia rozmiaru czcionki użytkownika
ptiOSPunkty — jednostka typograficzna, 1pt = 1px na ekranie 1x (nie Retina)
pxWszystkieFizyczne piksele ekranu — niezalecane do układu ze względu na różną gęstość

Gęstości ekranu są klasyfikowane: mdpi (160 dpi, 1x), hdpi (240 dpi, 1.5x), xhdpi (320 dpi, 2x), xxhdpi (480 dpi, 3x), xxxhdpi (640 dpi, 4x). Przy przygotowywaniu obrazów należy tworzyć zasoby dla wszystkich gęstości: icon.png, icon_hdpi.png, icon_xhdpi.png i tak dalej. Formaty wektorowe (VectorDrawable w Androidzie, SF Symbols w iOS) rozwiązują problem wielu zasobów rastrowych.

W IT Sectr używamy współczynnika skalowania do eksportu ikon z Figmy: eksportujemy w 1x, 2x, 3x dla iOS i mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi dla Androida. Gwarantuje to ostre wyświetlanie na wszystkich urządzeniach, w tym tabletach i składanych smartfonach.

Nowoczesne koncepcje UI: Tryb ciemny, Safe Area, Dostępność

Nowoczesne komponenty UI aplikacji mobilnych muszą wspierać szereg standardów, bez których doświadczenie użytkownika byłoby niekompletne.

Tryb ciemny / Tryb jasny

Tryb ciemny to obowiązkowa opcja w nowoczesnych aplikacjach. Material Design 3 i iOS 13+ zapewniają wbudowane wsparcie dla ciemnego motywu. Ważne jest, aby nie odwracać kolorów, ale używać oddzielnych palet kolorów: ciemne tło, jasny tekst, obniżony kontrast dla elementów drugorzędnych. Automatyczne przełączanie można powiązać z motywem systemowym urządzenia.

Safe Area i obsługa Notch / Dynamic Island

Nowoczesne iPhone'y mają Notch (wycięcie na przedni aparat) i Dynamic Island. Urządzenia Android również mają wycięcia i zaokrąglone rogi (Corner Radius). Safe Area to obszar ekranu gwarantowany wolny od elementów systemowych (pasek stanu, wskaźnik home), paska nawigacji i wycięć. iOS automatycznie stosuje Safe Area Insets; Android wymaga jawnego sprawdzenia przez WindowInsets lub DisplayCutout.

Dostępność (a11y)

Dostępność zapewnia użyteczność aplikacji dla osób z niepełnosprawnościami. Kluczowe wymagania: wsparcie TalkBack (Android) i VoiceOver (iOS), poprawne contentDescription dla ImageView, wystarczający kontrast kolorów (minimum 4.5:1 dla tekstu), wsparcie Dynamic Type (iOS) dla skalowania czcionek, nawigacja bez wzroku i alternatywy dla gestów. WCAG 2.1 to międzynarodowy standard dostępności.

Globalizacja i lokalizacja (i18n / l10n)

Internacjonalizacja (i18n) to przygotowanie aplikacji do obsługi wielu języków i formatów regionalnych. Lokalizacja (l10n) to tłumaczenie ciągów znaków, dat, walut i cech kulturowych. Android używa katalogów zasobów (values-ru, values-de), iOS używa Localizable.strings i XLIFF. Flutter obsługuje flutter_localizations z plikami tłumaczeń ARB.

Gesty i interakcja

Interakcja dotykowa obejmuje wiele gestów: Dotknięcie, Długie naciśnięcie, Przesunięcie, Ściskanie do zoomu, Pociągnięcie do odświeżenia, Przeciągnij i upuść. Android używa GestureDetector, iOS używa UIGestureRecognizer. iOS obsługuje również 3D Touch (Force Touch) i Haptic Touch z dotykowym sprzężeniem zwrotnym przez Taptic Engine.

Często zadawane pytania

Czym różni się Material Design od Human Interface Guidelines?

Material Design (Google) używa „materialnej" metafory z cieniami, warstwami i animowanymi przejściami, podczas gdy HIG (Apple) opiera się na czystości, Safe Area i Dynamic Type. Material Design jest zalecany dla Androida, HIG dla iOS. Wybór systemu projektowego wpływa również na nawigację: Android preferuje nawigację dolną i szufladę nawigacji, podczas gdy iOS preferuje pasek zakładek i kontroler nawigacji.

Co wybrać: Jetpack Compose czy SwiftUI?

Jetpack Compose to deklaratywny framework dla Androida, SwiftUI dla iOS. Oba używają podejścia deklaratywnego i upraszczają rozwój UI. Compose jest ściślej zintegrowany z Kotlinem i Android Architecture Components, SwiftUI z Combine i całym ekosystemem Apple.

Czym jest responsywny projekt w aplikacjach mobilnych?

Responsywny projekt to podejście, w którym interfejs dostosowuje się do rozmiaru ekranu, orientacji i gęstości pikseli. Używane są jednostki względne (dp, sp, pt), Auto Layout lub ConstraintLayout. Tablety, składane urządzenia i okna pulpitowe (iPad Stage Manager) wymagają dodatkowych adaptacji: podzielony widok, układ master-detail.

Jakie jednostki miary są używane w mobilnym UI?

dp (piksele niezależne od gęstości) i sp (piksele niezależne od skali) w Androidzie, pt (punkty) w iOS. px to piksele sprzętowe. dp i pt zapewniają ten sam fizyczny rozmiar na różnych gęstościach ekranu: mdpi (1x), hdpi (1.5x), xhdpi (2x), xxhdpi (3x), xxxhdpi (4x).

Czym jest dostępność (a11y) i dlaczego jest ważna?

Dostępność sprawia, że interfejs jest użyteczny dla osób z niepełnosprawnościami: wsparcie czytników ekranu, duży tekst, kontrast. Bez a11y aplikacja nie zostanie zaakceptowana do publikacji w App Store lub Google Play. Ponadto dostępność poprawia UX dla wszystkich użytkowników — na przykład wsparcie Dynamic Type pomaga osobom słabowidzącym.

Podsumowanie

  • Material Design (Android) i Human Interface Guidelines (iOS) są niezbędne dla każdego programisty mobilnego
  • Frameworki deklaratywne SwiftUI i Jetpack Compose są standardem dla nowych projektów
  • Natywne komponenty (RecyclerView, UITableView, NavigationView) pozostają istotne dla obsługi starszego oprogramowania
  • Jednostki dp / sp / pt zapewniają poprawne wyświetlanie na wszystkich gęstościach ekranu
  • Safe Area, Tryb ciemny i Dostępność to obowiązkowe wymagania dla nowoczesnych aplikacji
  • Flutter Widgets i rozwiązania wieloplatformowe wymagają znajomości obu platform
  • Sterowanie gestami (przesuwanie, ściskanie do zoomu, pociągnięcie do odświeżenia) to integralna część mobilnego UX

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt