UI/UX و مؤلفه‌ها در توسعه موبایل: چیست، انواع و نحوه استفاده

نویسنده: IT Sectr منتشر شده: 2026-02-23 زمان مطالعه: 11 دقیقه

توسعه رابط اپلیکیشن موبایل با درک مؤلفه‌ها و فریمورک‌های UI آغاز می‌شود. این مقاله Material Design، Human Interface Guidelines، SwiftUI، Jetpack Compose، Flutter Widgets، سیستم واحدهای اندازه‌گیری (dp، sp، pt، px) و تمام عناصر کلیدی UI — از NavigationView و RecyclerView تا Safe Area و Dark Mode را پوشش می‌دهد. مطالب برای مبتدیانی که از تئوری به پروژه‌های اول خود می‌روند طراحی شده است. برای جزئیات بیشتر، به مستندات رسمی Material Design مراجعه کنید.

نکات کلیدی

  • Material Design (Google) و Human Interface Guidelines (Apple) دو سیستم طراحی اصلی برای پلتفرم‌های موبایل هستند
  • فریمورک‌های اعلامی SwiftUI و Jetpack Compose جایگزین UIView کلاسیک و چیدمان XML می‌شوند
  • Flutter از کتابخانه Widgets خود استفاده می‌کند — همه چیز از متن تا انیمیشن یک ویجت است
  • واحدهای dp، sp و pt نمایش صحیح روی صفحه‌های با تراکم مختلف (mdpi–xxxhdpi) را تضمین می‌کنند
  • دسترسی‌پذیری (a11y) و بین‌المللی‌سازی (i18n) الزامات اجباری برای انتشار در فروشگاه‌های اپلیکیشن هستند

سیستم‌های طراحی: Material Design و Human Interface Guidelines

هر پلتفرم مجموعه قوانین و مؤلفه‌های خاص خود را ارائه می‌دهد. برای Android، این Material Design است که توسط Google در سال 2014 توسعه یافت. Material Design از استعاره مواد فیزیکی استفاده می‌کند — لایه‌ها، سایه‌ها (Elevation)، انتقال‌های متحرک و چیدمان‌های تطبیقی. اصول کلیدی شامل سلسله‌مراتب از طریق ارتفاع، حرکت معنادار و سازگاری با عوامل شکل مختلف است. توصیه می‌کنیم Material Design 3 (Material You) — آخرین نسخه با تم پویا و رنگ‌های شخصی‌سازی شده — را کاوش کنید.

Apple Human Interface Guidelines (HIG) را ارائه می‌دهد — مجموعه‌ای از قوانین برای iOS، iPadOS، macOS، watchOS و tvOS. HIG بر تایپوگرافی واضح (San Francisco)، Safe Area برای در نظر گرفتن Notch و Dynamic Island، ناوبری مبتنی بر ژست و سازگاری تأکید دارد. برخلاف Material Design، HIG از "لایه‌ها" و Elevation استفاده نمی‌کند — در عوض، از تاری (vibrancy)، سایه‌ها و جداکننده‌های ظریف استفاده می‌کند. مستندات کامل HIG به طور منظم با نسخه‌های جدید iOS به‌روزرسانی می‌شود.

در IT Sectr، بسته به پلتفرم مشتری از هر دو سیستم طراحی استفاده می‌کنیم. برای پروژه‌های چندسکویی Flutter، یک سیستم طراحی یکپارچه توسعه می‌دهیم که بهترین روش‌های Material Design و HIG را ترکیب می‌کند. این رویکرد بدون تکرار کد، UX بومی را در هر پلتفرم حفظ می‌کند.

فریمورک‌های UI اعلامی: SwiftUI و Jetpack Compose

رویکرد سنتی برای ساخت UI، چیدمان امری از طریق XML (Android) یا Interface Builder / کد (iOS) است. جایگزین مدرن فریمورک‌های اعلامی هستند، جایی که توسعه‌دهنده توصیف می‌کند که رابط در هر حالت چگونه باید باشد و فریمورک به‌روزرسانی‌ها را مدیریت می‌کند.

Jetpack Compose (Android)

Jetpack Compose یک جعبه ابزار مدرن از Google برای ساخت UI بومی در Kotlin است. به جای چیدمان XML، از توابع ترکیب‌پذیر Kotlin (@Composable) استفاده می‌شود. Compose کاملاً اعلامی است: وقتی داده‌ها تغییر می‌کنند، فقط بخش‌های تغییر یافته صفحه دوباره ترسیم می‌شوند. مثال یک صفحه ساده با متن و دکمه:

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

SwiftUI (iOS)

SwiftUI فریمورک اعلامی Apple است که در سال 2019 معرفی شد. از طریق یک API یکپارچه روی همه پلتفرم‌های Apple (iOS، iPadOS، macOS، watchOS، tvOS) کار می‌کند. SwiftUI از ساختارهای View، ویژگی‌های @State و @Binding برای مدیریت داده و اصلاح‌کننده‌ها برای استایل‌دهی استفاده می‌کند. معادل مثال بالا در SwiftUI:

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

Flutter Widgets

Flutter از Google از کتابخانه ویجت خود استفاده می‌کند. همه چیز در Flutter یک ویجت است — از padding تا یک صفحه کامل. ویجت‌ها به StatelessWidget (تغییرناپذیر) و StatefulWidget (با حالت) تقسیم می‌شوند. کانتینرهای پایه Container، Row، Column، Stack هستند. Flutter از مؤلفه‌های بومی پلتفرم استفاده نمی‌کند — همه چیز را از طریق Skia Engine ترسیم می‌کند و ظاهر یکسانی را در Android و 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('Нажми меня'),
                ),
            ],
        );
    }
}

مؤلفه‌های UI بومی برای Android و iOS

علیرغم گسترش فریمورک‌های اعلامی، درک مؤلفه‌های بومی برای پشتیبانی از پروژه‌های قدیمی و سفارشی‌سازی عمیق مهم است.

ناوبری

ناوبری در Android بر اساس Activity (صفحه‌های فعالیت) و Fragment (بخش‌های داخل یک Activity) ساخته شده است. Jetpack Navigation Component انتقال بین صفحه‌ها را از طریق یک گراف ناوبری ساده می‌کند. در iOS، ناوبری از طریق NavigationController — پشته‌ای از کنترلرها با انتقال‌های متحرک — پیاده‌سازی می‌شود. Tab Bar و Bottom Navigation امکان جابجایی بین بخش‌های اصلی اپلیکیشن را فراهم می‌کنند. Drawer (منوی کناری) و Toolbar/ActionBar برای اقدامات اضافی استفاده می‌شوند. Android Navigation Component برای همه پروژه‌های جدید توصیه می‌شود.

لیست‌ها

برای نمایش حجم زیادی از داده، Android از RecyclerView — یک کانتینر کارآمد با استفاده مجدد از ViewHolder — استفاده می‌کند. معادل‌های iOS UITableView (لیست‌های عمودی) و UICollectionView (شبکه‌ها) هستند. Jetpack Compose LazyColumn و LazyVerticalGrid را ارائه می‌دهد، در حالی که SwiftUI List و LazyVStack/LazyHStack را فراهم می‌کند. مزیت کلیدی مؤلفه‌های Lazy، رندر فقط عناصر قابل مشاهده است.

پلتفرم مؤلفه لیست مؤلفه شبکه بارگذاری تنبل
Android (View System)RecyclerView + ListViewRecyclerView GridLayoutManagerبله
Android (Compose)LazyColumnLazyVerticalGridبله
iOS (UIKit)UITableViewUICollectionViewبله
iOS (SwiftUI)List / LazyVStackLazyVGridبله
FlutterListView.builderGridView.builderبله

چیدمان‌ها و موقعیت‌دهی

Android View System چندین کانتینر چیدمان ارائه می‌دهد: ConstraintLayout (سیستم محدودیت انعطاف‌پذیر)، LinearLayout (چیدمان خطی)، RelativeLayout (موقعیت‌دهی نسبی)، FrameLayout (انباشتن لایه). در iOS، Core Auto Layout از یک سیستم محدودیت (NSLayoutConstraint) برای توصیف موقعیت عناصر استفاده می‌کند. SwiftUI و Flutter به ترتیب از VStack/HStack/ZStack و Row/Column/Stack استفاده می‌کنند.

واحدهای اندازه‌گیری و چیدمان واکنش‌گرا

مؤلفه‌های UI دستگاه‌های موبایل با در نظر گرفتن تراکم پیکسل مختلف نمایش داده می‌شوند. برای اینکه رابط در همه صفحه‌ها یکسان به نظر برسد، از واحدهای مستقل از تراکم استفاده می‌شود.

واحد پلتفرم توضیحات
dpAndroidپیکسل مستقل از تراکم — واحد انتزاعی برابر با 1px در صفحه mdpi
spAndroidپیکسل مستقل از مقیاس — برای فونت‌ها، به تنظیمات اندازه فونت کاربر احترام می‌گذارد
ptiOSنقطه — واحد تایپوگرافی، 1pt = 1px در صفحه 1x (غیر Retina)
pxهمهپیکسل‌های فیزیکی صفحه — به دلیل تراکم متفاوت برای چیدمان توصیه نمی‌شود

تراکم صفحه به صورت زیر طبقه‌بندی می‌شود: mdpi (160 dpi، 1x)، hdpi (240 dpi، 1.5x)، xhdpi (320 dpi، 2x)، xxhdpi (480 dpi، 3x)، xxxhdpi (640 dpi، 4x). هنگام آماده‌سازی تصاویر، باید منابعی برای همه تراکم‌ها ایجاد کنید: icon.png، icon_hdpi.png، icon_xhdpi.png و غیره. فرمت‌های برداری (VectorDrawable در Android، SF Symbols در iOS) مشکل منابع شطرنجی متعدد را حل می‌کنند.

در IT Sectr، از یک عامل مقیاس برای صادرات آیکون‌ها از Figma استفاده می‌کنیم: با 1x، 2x، 3x برای iOS و mdpi، hdpi، xhdpi، xxhdpi، xxxhdpi برای Android صادر می‌کنیم. این کار نمایش واضح را در همه دستگاه‌ها از جمله تبلت‌ها و گوشی‌های تاشو تضمین می‌کند.

مفاهیم مدرن UI: حالت تاریک، Safe Area، دسترسی‌پذیری

مؤلفه‌های UI اپلیکیشن‌های موبایل مدرن باید از تعدادی استاندارد پشتیبانی کنند که بدون آنها تجربه کاربری ناقص خواهد بود.

حالت تاریک / حالت روشن

حالت تاریک یک گزینه اجباری در اپلیکیشن‌های مدرن است. Material Design 3 و iOS 13+ پشتیبانی داخلی از تم تیره را ارائه می‌دهند. مهم است که رنگ‌ها را معکوس نکنید، بلکه از پالت‌های رنگی جداگانه استفاده کنید: پس‌زمینه تیره، متن روشن، کنتراست کاهش یافته برای عناصر ثانویه. تغییر خودکار را می‌توان به تم سیستم دستگاه متصل کرد.

Safe Area و پشتیبانی از Notch / Dynamic Island

iPhoneهای مدرن دارای Notch (بریدگی برای دوربین جلو) و Dynamic Island هستند. دستگاه‌های Android نیز دارای بریدگی و گوشه‌های گرد (Corner Radius) هستند. Safe Area ناحیه‌ای از صفحه است که تضمین شده از عناصر سیستم (نوار وضعیت، نشانگر خانه)، نوار ناوبری و بریدگی‌ها خالی است. iOS به طور خودکار Safe Area Insets را اعمال می‌کند؛ Android نیاز به بررسی صریح از طریق WindowInsets یا DisplayCutout دارد.

دسترسی‌پذیری (a11y)

دسترسی‌پذیری قابلیت استفاده از اپلیکیشن را برای افراد دارای معلولیت تضمین می‌کند. الزامات کلیدی: پشتیبانی از TalkBack (Android) و VoiceOver (iOS)، contentDescription صحیح برای ImageView، کنتراست رنگ کافی (حداقل 4.5:1 برای متن)، پشتیبانی از Dynamic Type (iOS) برای مقیاس‌بندی فونت، ناوبری بدون بینایی و جایگزین‌های ژست. WCAG 2.1 استاندارد بین‌المللی دسترسی‌پذیری است.

جهانی‌سازی و بومی‌سازی (i18n / l10n)

بین‌المللی‌سازی (i18n) آماده‌سازی اپلیکیشن برای پشتیبانی از چندین زبان و فرمت‌های منطقه‌ای است. بومی‌سازی (l10n) ترجمه رشته‌ها، تاریخ‌ها، ارزها و ویژگی‌های فرهنگی است. Android از دایرکتوری‌های منبع (values-ru، values-de) استفاده می‌کند، iOS از Localizable.strings و XLIFF استفاده می‌کند. Flutter از flutter_localizations با فایل‌های ترجمه ARB پشتیبانی می‌کند.

ژست‌ها و تعامل

تعامل لمسی شامل ژست‌های زیادی است: ضربه، فشار طولانی، کشیدن، نیشگون برای بزرگنمایی، کشیدن برای به‌روزرسانی، کشیدن و رها کردن. Android از GestureDetector استفاده می‌کند، iOS از UIGestureRecognizer استفاده می‌کند. iOS همچنین از 3D Touch (Force Touch) و Haptic Touch با بازخورد لمسی از طریق Taptic Engine پشتیبانی می‌کند.

سوالات متداول

تفاوت Material Design و Human Interface Guidelines چیست؟

Material Design (Google) از استعاره "مادی" با سایه‌ها، لایه‌ها و انتقال‌های متحرک استفاده می‌کند، در حالی که HIG (Apple) بر وضوح، Safe Area و Dynamic Type تکیه دارد. Material Design برای Android، HIG برای iOS توصیه می‌شود. انتخاب سیستم طراحی بر ناوبری نیز تأثیر می‌گذارد: Android ناوبری پایین و کشوی ناوبری را ترجیح می‌دهد، در حالی که iOS نوار تب و کنترلر ناوبری را ترجیح می‌دهد.

کدام را انتخاب کنیم: Jetpack Compose یا SwiftUI؟

Jetpack Compose یک فریمورک اعلامی برای Android است، SwiftUI برای iOS. هر دو از رویکرد اعلامی استفاده می‌کنند و توسعه UI را ساده می‌کنند. Compose با Kotlin و Android Architecture Components ادغام نزدیک‌تری دارد، SwiftUI با Combine و کل اکوسیستم Apple.

طراحی واکنش‌گرا در اپلیکیشن‌های موبایل چیست؟

طراحی واکنش‌گرا رویکردی است که در آن رابط با اندازه صفحه، جهت و تراکم پیکسل سازگار می‌شود. از واحدهای نسبی (dp، sp، pt)، Auto Layout یا ConstraintLayout استفاده می‌شود. تبلت‌ها، دستگاه‌های تاشو و پنجره‌های دسکتاپ (iPad Stage Manager) نیاز به سازگاری‌های اضافی دارند: نمای تقسیم، چیدمان master-detail.

چه واحدهای اندازه‌گیری در UI موبایل استفاده می‌شود؟

dp (پیکسل مستقل از تراکم) و sp (پیکسل مستقل از مقیاس) در Android، pt (نقطه) در iOS. px پیکسل‌های سخت‌افزاری هستند. dp و pt اندازه فیزیکی یکسانی را در تراکم‌های مختلف صفحه ارائه می‌دهند: mdpi (1x)، hdpi (1.5x)، xhdpi (2x)، xxhdpi (3x)، xxxhdpi (4x).

دسترسی‌پذیری (a11y) چیست و چرا مهم است؟

دسترسی‌پذیری رابط را برای افراد دارای معلولیت قابل استفاده می‌کند: پشتیبانی از صفحه‌خوان، متن بزرگ، کنتراست. بدون a11y، یک اپلیکیشن برای انتشار در App Store یا Google Play پذیرفته نخواهد شد. علاوه بر این، دسترسی‌پذیری UX را برای همه کاربران بهبود می‌بخشد — به عنوان مثال، پشتیبانی از Dynamic Type به افراد با بینایی ضعیف کمک می‌کند.

خلاصه

  • Material Design (Android) و Human Interface Guidelines (iOS) برای هر توسعه‌دهنده موبایلی ضروری است
  • فریمورک‌های اعلامی SwiftUI و Jetpack Compose استاندارد پروژه‌های جدید هستند
  • مؤلفه‌های بومی (RecyclerView، UITableView، NavigationView) برای پشتیبانی قدیمی مرتبط باقی می‌مانند
  • واحدهای dp / sp / pt نمایش صحیح را در همه تراکم‌های صفحه تضمین می‌کنند
  • Safe Area، حالت تاریک و دسترسی‌پذیری الزامات اجباری برای اپلیکیشن‌های مدرن هستند
  • Flutter Widgets و راه‌حل‌های چندسکویی نیاز به دانش هر دو پلتفرم دارند
  • کنترل با ژست (کشیدن، نیشگون برای بزرگنمایی، کشیدن برای به‌روزرسانی) بخش جدایی‌ناپذیر UX موبایل است

ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد

IT Sectr از سال 2017 برنامه‌های iOS و Android را برای استارتاپ‌ها و کسب‌وکارها ایجاد می‌کند. ما به شما مشاوره می‌دهیم و بهترین راه‌حل را پیشنهاد خواهیم کرد.

بحث درباره پروژه