Material Design 3 في Compose

توفّر Jetpack Compose تنفيذًا للتصميم المتعدد الأبعاد 3، وهو التطور التالي للتصميم المتعدد الأبعاد. يتضمّن Material 3 ميزات معدّلة للمظاهر والمكوّنات وميزات تخصيص Material You، مثل الألوان الديناميكية، وتم تصميمه ليكون متسقًا مع النمط المرئي الجديد وواجهة مستخدم النظام على Android 12 والإصدارات الأحدث.

سنوضِّح أدناه تنفيذ التصميم Material Design 3 باستخدام نموذج تطبيق Response (الرد) كمثال. تستند عينة الرد بالكامل إلى التصميم متعدد الأبعاد 3.

الرد على نموذج تطبيق باستخدام التصميم المتعدد الأبعاد 3
الشكل 1. الرد على نموذج تطبيق باستخدام التصميم المتعدد الأبعاد 3

التبعية

لبدء استخدام المادة 3 في تطبيق Compose، أضِف التبعية Compose Material 3 إلى ملفات build.gradle:

implementation "androidx.compose.material3:material3:$material3_version"

بمجرد إضافة التبعية، يمكنك البدء في إضافة أنظمة Material Design، بما في ذلك اللون وأسلوب الخط والشكل، إلى تطبيقاتك.

واجهات برمجة التطبيقات التجريبية

تُعد بعض واجهات برمجة التطبيقات M3 API تجريبية. وفي مثل هذه الحالات، عليك تفعيل الميزة على مستوى الوظيفة أو الملف باستخدام التعليق التوضيحي ExperimentalMaterial3Api:

// import androidx.compose.material3.ExperimentalMaterial3Api
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun AppComposable() {
    // M3 composables
}

تحديد نسق المواد

يحتوي المظهر M3 على الأنظمة الفرعية التالية: نظام الألوان وأسلوب الخط والأشكال. عند تخصيص هذه القيم، تنعكس التغييرات التي أجريتها تلقائيًا في مكونات M3 التي تستخدمها لإنشاء تطبيقك.

الأنظمة الفرعية للتصميم المتعدد الأبعاد: اللون وأسلوب الخط والأشكال
الشكل 2. الأنظمة الفرعية للتصميم المتعدد الأبعاد: الألوان وأسلوب الخط والأشكال

تنفّذ Jetpack Compose هذه المفاهيم باستخدام الإصدار MaterialTheme من M3 القابل للإنشاء:

MaterialTheme(
    colorScheme = /* ...
    typography = /* ...
    shapes = /* ...
) {
    // M3 app content
}

لوضع موضوع لمحتوى تطبيقك، حدد نظام الألوان وأسلوب الخط والأشكال الخاصة بتطبيقك.

النمط اللوني

أساس نظام الألوان هو مجموعة من خمسة ألوان رئيسية. ويرتبط كل لون من هذه الألوان بلوحة ألوان من 13 درجة لون تستخدمها مكوّنات المادة 3. على سبيل المثال، في ما يلي نظام الألوان للمظهر الفاتح لعملية الرد:

الرد على نموذج الألوان الفاتحة للتطبيق
الشكل 3. الرد على نموذج ألوان فاتحة للتطبيق

يمكنك الاطّلاع على المزيد من المعلومات حول أدوار الألوان وأنظمة الألوان.

إنشاء مخططات الألوان

يمكنك إنشاء ColorScheme مخصّص يدويًا، ولكن غالبًا ما يكون من الأسهل إنشاء واحدة باستخدام ألوان المصدر من علامتك التجارية. تتيح لك أداة أداة إنشاء مظاهر المواد إجراء ذلك، ويمكنك تصدير رمز إنشاء المظاهر اختياريًا. يتم إنشاء الملفات التالية:

  • يحتوي Color.kt على ألوان المظهر مع جميع الأدوار المحددة لكل من ألوان المظهر الفاتح والداكن.

val md_theme_light_primary = Color(0xFF476810)
val md_theme_light_onPrimary = Color(0xFFFFFFFF)
val md_theme_light_primaryContainer = Color(0xFFC7F089)
// ..
// ..

val md_theme_dark_primary = Color(0xFFACD370)
val md_theme_dark_onPrimary = Color(0xFF213600)
val md_theme_dark_primaryContainer = Color(0xFF324F00)
// ..
// ..

  • يحتوي Theme.kt على إعداد لدرجات الألوان الفاتحة والداكنة ومظهر التطبيق.

private val LightColorScheme = lightColorScheme(
    primary = md_theme_light_primary,
    onPrimary = md_theme_light_onPrimary,
    primaryContainer = md_theme_light_primaryContainer,
    // ..
)
private val DarkColorScheme = darkColorScheme(
    primary = md_theme_dark_primary,
    onPrimary = md_theme_dark_onPrimary,
    primaryContainer = md_theme_dark_primaryContainer,
    // ..
)

@Composable
fun ReplyTheme(
    darkTheme: Boolean = isSystemInDarkTheme(),
    content: @Composable () -> Unit
) {
    val colorScheme =
        if (!darkTheme) {
            LightColorScheme
        } else {
            DarkColorScheme
        }
    MaterialTheme(
        colorScheme = colorScheme,
        content = content
    )
}

لإتاحة المظهرَين الفاتح والداكن، استخدِم isSystemInDarkTheme(). بناءً على إعداد النظام، حدد نظام الألوان المطلوب استخدامه: فاتح أم داكن.

أنظمة ألوان ديناميكية

اللون الديناميكي هو جزء أساسي في Material You، حيث تستمد الخوارزمية ألوانًا مخصّصة من خلفية المستخدم ليتم تطبيقها على التطبيقات وواجهة مستخدم النظام. تُستخدم لوحة الألوان هذه كنقطة بداية لإنشاء مخططات ألوان فاتحة وداكنة.

الرد على نموذج التصميم الديناميكي للتطبيق من الخلفية (على اليمين) واختيار المظهر التلقائي للتطبيق (على اليسار)
الشكل 4. الرد على نموذج التصميم الديناميكي للتطبيق من الخلفية (على اليمين) واختيار المظهر التلقائي للتطبيق (على اليسار)

تتوفّر الألوان الديناميكية على نظام التشغيل Android 12 والإصدارات الأحدث. إذا كان اللون الديناميكي متاحًا، يمكنك إعداد ColorScheme ديناميكي. وإذا لم يكن كذلك، عليك العودة إلى استخدام ضوء مخصّص أو إضاءة داكنة ColorScheme.

توفر ColorScheme دوال الإنشاء لإنشاء نظام ألوان فاتح أو داكن:

// Dynamic color is available on Android 12+
val dynamicColor = Build.VERSION.SDK_INT >= Build.VERSION_CODES.S
val colors = when {
    dynamicColor && darkTheme -> dynamicDarkColorScheme(LocalContext.current)
    dynamicColor && !darkTheme -> dynamicLightColorScheme(LocalContext.current)
    darkTheme -> DarkColorScheme
    else -> LightColorScheme
}

استخدام الألوان

يمكنك الوصول إلى ألوان نسق المواد في تطبيقك من خلال MaterialTheme.colorScheme:

Text(
    text = "Hello theming",
    color = MaterialTheme.colorScheme.primary
)

يمكن استخدام كل دور لون في مجموعة متنوعة من الأماكن اعتمادًا على حالة المكون وبروزه وتوكيده.

  • اللون الأساسي هو اللون الأساسي، المستخدم للمكونات الرئيسية مثل الأزرار البارزة والحالات النشطة ودرجة لون الأسطح المرتفعة.
  • يُستخدم لون المفتاح الثانوي للمكوّنات الأقل بروزًا في واجهة المستخدم، مثل شرائح الفلتر، ويزيد من فرصة التعبير عن اللون.
  • يُستخدم لون المفتاح الثالث لاستنتاج أدوار اللكنات المتباينة التي يمكن استخدامها لتحقيق التوازن بين الألوان الأساسية والثانوية أو جذب انتباه محسّن إلى عنصر ما.

يستخدم تصميم تطبيق نموذج الرد لون الحاوية الأساسية أعلى الحاوية الأساسية للتوكيد على العنصر المحدد.

الحاوية الأساسية والحقول النصية مع لون الحاوية الأساسية
الشكل 5. الحاوية الأساسية والحقول النصية مع لون الحاوية الأساسية

Card(
    colors = CardDefaults.cardColors(
        containerColor =
        if (isSelected) MaterialTheme.colorScheme.primaryContainer
        else
            MaterialTheme.colorScheme.surfaceVariant
    )
) {
    Text(
        text = "Dinner club",
        style = MaterialTheme.typography.bodyLarge,
        color =
        if (isSelected) MaterialTheme.colorScheme.onPrimaryContainer
        else MaterialTheme.colorScheme.onSurface,
    )
}

يمكنك أن ترى هنا في درج التنقل "الرد" كيفية استخدام ألوان الحاويات الثانوية والثالثية على عكس لإنشاء التوكيد والتمييز.

مجموعة الحاوية الثالثة والحاوية الثالثة لزر الإجراء العائم.
الشكل 6. مجموعة الحاوية الثالثة والحاوية الثالثة لزر الإجراء العائم.

أسلوب الخط

يحدد Material Design 3 مقياس النوع، بما في ذلك أنماط النص التي تم تعديلها من Material Design 2. تم تبسيط التسمية والتجميع إلى: عرض، وعنوان، عنوان، ونص، وتصنيف، بأحجام كبيرة ومتوسطة وصغيرة لكل منها.

مقياس أسلوب الخط التلقائي للتصميم المتعدد الأبعاد 3
الشكل 7. مقياس أسلوب الخط التلقائي للتصميم المتعدد الأبعاد 3
م3 حجم الخط/ارتفاع السطر التلقائي
displayLarge Roboto 57/64
displayMedium Roboto 45/52
displaySmall Roboto 36/44
headlineLarge Roboto 32/40
headlineMedium Roboto 28/36
headlineSmall Roboto 24/32
titleLarge New- Roboto Medium 22/28
titleMedium Roboto Medium 16/24
titleSmall Roboto Medium 14/20
bodyLarge Roboto 16/24
bodyMedium Roboto 14/20
bodySmall Roboto 12/16
labelLarge Roboto Medium 14/20
labelMedium Roboto Medium 12/16
labelSmall New Roboto Medium, 11/16

تعريف أسلوب الخط

يوفر Compose الفئة M3 Typography، بالإضافة إلى فئتَي TextStyle والمتعلّقة بالخطوط الحالية، لوضع نموذج لمقياس النوع Material 3. تقدّم الدالة الإنشائية Typography إعدادات تلقائية لكل نمط، ما يتيح لك حذف أي معلمات لا تريد تخصيصها:

val replyTypography = Typography(
    titleLarge = TextStyle(
        fontWeight = FontWeight.SemiBold,
        fontSize = 22.sp,
        lineHeight = 28.sp,
        letterSpacing = 0.sp
    ),
    titleMedium = TextStyle(
        fontWeight = FontWeight.SemiBold,
        fontSize = 16.sp,
        lineHeight = 24.sp,
        letterSpacing = 0.15.sp
    ),
    // ..
)
// ..

الجسم كبير ومتوسط الحجم ومتوسط التصنيف لاستخدامات أسلوب الخط المختلفة.
الشكل 8. الجسم كبير ومتوسط الحجم ومتوسط التصنيف لاستخدامات أسلوب الخط المختلفة.

من المحتمل ألا يحتاج منتجك إلى جميع الأنماط الافتراضية الـ 15 من مقياس نوع التصميم متعدد الأبعاد. في هذا المثال، يتم اختيار خمسة أحجام لمجموعة مخفّضة بينما يتم حذف بقية الأحجام.

يمكنك تخصيص أسلوب الخط من خلال تغيير القيم التلقائية للسمتَين TextStyle والمرتبطة بالخطوط، مثل fontFamily وletterSpacing.

bodyLarge = TextStyle(
    fontWeight = FontWeight.Normal,
    fontFamily = FontFamily.SansSerif,
    fontStyle = FontStyle.Italic,
    fontSize = 16.sp,
    lineHeight = 24.sp,
    letterSpacing = 0.15.sp,
    baselineShift = BaselineShift.Subscript
),

بعد تحديد Typography، مرِّره إلى MaterialTheme على M3:

MaterialTheme(
    typography = replyTypography,
) {
    // M3 app Content
}

استخدام أنماط النص

يمكنك استرداد رسم الخط المتوفّر في MaterialTheme M3 القابل للإنشاء باستخدام MaterialTheme.typography:

Text(
    text = "Hello M3 theming",
    style = MaterialTheme.typography.titleLarge
)
Text(
    text = "you are learning typography",
    style = MaterialTheme.typography.bodyMedium
)

يمكنك قراءة المزيد عن إرشادات المواد بشأن تطبيق أسلوب الخط.

الأشكال

يمكن عرض الأسطح المادية بأشكال مختلفة. والأشكال الانتباه المباشر، وتحديد المكونات، وتوصيل الحالة، والتعبير عن العلامة التجارية.

يحدد مقياس الشكل نمط زوايا الحاوية، بحيث تتوفر مجموعة من الاستدارة بدءًا من المربع إلى الشكل الدائري بالكامل.

تحديد الأشكال

توفّر Compose للفئة M3 Shapes مَعلمات موسّعة لإتاحة الأشكال الجديدة من M3. مقياس الشكل M3 أشبه بمقياس النوع، ما يتيح مجموعة معبرة من الأشكال عبر واجهة المستخدم.

هناك أحجام مختلفة للأشكال:

  • صغير جدًا
  • صغير
  • متوسطة
  • كبير
  • كبيرة جدًا

بشكل افتراضي، لكل شكل قيمة افتراضية، ولكن يمكنك تجاوز ما يلي:

val replyShapes = Shapes(
    extraSmall = RoundedCornerShape(4.dp),
    small = RoundedCornerShape(8.dp),
    medium = RoundedCornerShape(12.dp),
    large = RoundedCornerShape(16.dp),
    extraLarge = RoundedCornerShape(24.dp)
)

بعد تحديد Shapes، يمكنك تمريره إلى MaterialTheme على M3:

MaterialTheme(
    shapes = replyShapes,
) {
    // M3 app Content
}

استخدام الأشكال

يمكنك تخصيص مقياس الشكل لجميع المكونات في MaterialTheme أو يمكنك إجراء ذلك على أساس كل مكوّن على حدة.

تطبيق شكل متوسط وكبير بقيم تلقائية:

Card(shape = MaterialTheme.shapes.medium) { /* card content */ }
FloatingActionButton(
    shape = MaterialTheme.shapes.large,
    onClick = {
    }
) {
    /* fab content */
}

شكل متوسط للبطاقة والشكل الكبير لزر الإجراء العائم في نموذج تطبيق الرد.
الشكل 9. شكل متوسط للبطاقة والشكل الكبير لزر الإجراء العائم في نموذج تطبيق الرد

هناك شكلان آخران، وهما RectangleShape وCircleShape، وهما جزءان من Compose. لا يحتوي شكل المستطيل على نصف قطر حدي ويعرض شكل الدائرة حواف دائرية كاملة:

Card(shape = RectangleShape) { /* card content */ }
Card(shape = CircleShape) { /* card content */ }

توضح الأمثلة أدناه بعض المكونات ذات قيم الشكل الافتراضية المطبقة عليها:

قيم الأشكال التلقائية لجميع مكوّنات المادة 3
الشكل 10. قيم الأشكال التلقائية لجميع مكوّنات المادة 3

يمكنك قراءة المزيد عن إرشادات Material بشأن تطبيق الشكل.

التوكيد

يتم توفير التوكيد في M3 باستخدام أشكال مختلفة من الألوان ومجموعات الألوان الخاصة بها. في M3، هناك طريقتان لإضافة التوكيد إلى واجهة المستخدم الخاصة بك:

  • باستخدام ألوان السطح وتباين السطح والخلفية إلى جانب ألوان متغيّرات على السطح من نظام ألوان M3 الموسّع. على سبيل المثال، يمكن استخدام السطح مع صيغ سطحية مختلفة، ويمكن استخدام تباين سطحي لتوفير مستويات مختلفة من التوكيد.
استخدام مجموعات ألوان محايدة للتوكيد.
الشكل 11. استخدام مجموعات ألوان محايدة للتأكيد.
  • استخدام درجات كثافة خطوط مختلفة للنص أعلاه، لقد رأيت أنه يمكنك توفير ترجيحات مخصصة لمقياس النوع لدينا لتوفير توكيد مختلف.

bodyLarge = TextStyle(
    fontWeight = FontWeight.Bold
),
bodyMedium = TextStyle(
    fontWeight = FontWeight.Normal
)

الارتفاع

يمثل المادة 3 المسقط الرأسي باستخدام تراكبات ألوان من حيث الدرجات اللونية. هذه طريقة جديدة للتمييز بين الحاويات والأسطح عن بعضها البعض، حيث يستخدم ارتفاع درجة اللون المتزايد نغمة أكثر بروزًا، بالإضافة إلى الظلال.

ارتفاع الدرجات مع ارتفاع الظل
الشكل 12. المسقط الرأسي الدرجاتي مع ارتفاع الظلE

وقد تغيرت أيضًا تراكبات الارتفاع في المظاهر الداكنة إلى تراكبات لون من الدرجات اللونية في المادة 3. يأتي لون التراكب من خانة اللون الأساسي.

ارتفاع الظل مقابل ارتفاع الدرجات اللونية في Material Design 3
الشكل 13. ارتفاع الظل مقابل ارتفاع الدرجات اللونية في Material Design 3

يشمل السطح M3، الجزء الخلفي القابل للإنشاء لمعظم مكونات M3، إمكانية تحديد ارتفاع درجة اللون وارتفاع الظل:

Surface(
    modifier = Modifier,
    tonalElevation = /*...
    shadowElevation = /*...
) {
    Column(content = content)
}

مكوّنات المادة

يأتي التصميم المتعدد الأبعاد مع مجموعة غنية من مكونات Material (مثل الأزرار والشرائح والبطاقات وشريط التنقل) التي تتبع حاليًا ميزة Material Design وتساعدك على إنشاء تطبيقات Material Design جميلة. يمكنك البدء في استخدام المكونات ذات الخصائص الافتراضية مباشرة من البداية.

Button(onClick = { /*..*/ }) {
    Text(text = "My Button")
}

توفر M3 العديد من الإصدارات من نفس المكونات لاستخدامها في أدوار مختلفة وفقًا للتأكيد والاهتمام.

التوكيد على الزر من زر الإجراء الرئيسي (FAB)، إلى الزر الأساسي وصولاً إلى الزر "نص"
الشكل 14. التوكيد على الزر من FAB، زر أساسي وصولاً إلى زر النص
  • زر إجراء عائم موسع لإجراء أعلى توكيد:

ExtendedFloatingActionButton(
    onClick = { /*..*/ },
    modifier = Modifier
) {
    Icon(
        imageVector = Icons.Default.Edit,
        contentDescription = stringResource(id = R.string.edit),
    )
    Text(
        text = stringResource(id = R.string.add_entry),
    )
}

  • زر معبأ لإجراء تركيز عالي:

Button(onClick = { /*..*/ }) {
    Text(text = stringResource(id = R.string.view_entry))
}

  • زر نصي لإجراء منخفض التركيز:

TextButton(onClick = { /*..*/ }) {
    Text(text = stringResource(id = R.string.replated_articles))
}

يمكنك قراءة المزيد من المعلومات عن الأزرار والمكوّنات الأخرى في Material. ويوفر المادة 3 مجموعة متنوعة من مجموعات المكوّنات مثل الأزرار وأشرطة التطبيقات ومكونات التنقل المصممة خصيصًا لحالات الاستخدام وأحجام الشاشات المختلفة.

يوفر Material أيضًا العديد من مكونات التنقل التي تساعدك في تنفيذ التنقل، اعتمادًا على أحجام الشاشة وحالاتها المختلفة.

تُستخدم السمة NavigationBar للأجهزة الصغيرة عندما تريد استهداف 5 وجهات أو أقل:

NavigationBar(modifier = Modifier.fillMaxWidth()) {
    Destinations.entries.forEach { replyDestination ->
        NavigationBarItem(
            selected = selectedDestination == replyDestination,
            onClick = { },
            icon = { }
        )
    }
}

يُستخدم NavigationRail مع الأجهزة اللوحية أو الهواتف ذات الحجم الصغير إلى المتوسط في الوضع الأفقي. حيث توفر هندسة مريحة للمستخدمين ويحسن تجربة المستخدم لتلك الأجهزة.

NavigationRail(
    modifier = Modifier.fillMaxHeight(),
) {
    Destinations.entries.forEach { replyDestination ->
        NavigationRailItem(
            selected = selectedDestination == replyDestination,
            onClick = { },
            icon = { }
        )
    }
}

عرض الرد لشريط التنقل السفلي (الأيمن) وشريط التنقل (Rail) (على اليمين)
الشكل 15. عرض الرد بـ BottomNavigationBar (يسار) وNavigationRail (يمين)

يمكنك الردّ باستخدام كلا المظهرَين التلقائيَين لتحسين تجربة المستخدم الغامرة على جميع أحجام الأجهزة.

يُستخدم NavigationDrawer مع الأجهزة اللوحية ذات الحجم المتوسط إلى الكبير، حيث تتوفر لديك مساحة كافية لعرض التفاصيل. يمكنك استخدام السمة PermanentNavigationDrawer أو السمة ModalNavigationDrawer مع السمة NavigationRail.

PermanentNavigationDrawer(modifier = Modifier.fillMaxHeight(), drawerContent = {
    Destinations.entries.forEach { replyDestination ->
        NavigationRailItem(
            selected = selectedDestination == replyDestination,
            onClick = { },
            icon = { },
            label = { }
        )
    }
}) {
}

عرض الرد في لائحة التنقل الدائم
الشكل 16. واجهة عرض الرد لدرج التنقل الدائم

تُحسِّن خيارات التنقل من تجربة المستخدم وهندسة التصميم وسهولة الوصول إليه. يمكنك معرفة المزيد من المعلومات عن مكوّنات التنقّل باستخدام Material في الدرس التطبيقي حول الترميز التكيُّفي.

تخصيص تصميم المكوِّن

يوفّر الإصدار M3 إمكانية التخصيص والمرونة. تستخدم جميع المكوّنات ألوانًا تلقائية، مع أنّها تعرض واجهات برمجة تطبيقات مرنة لتخصيص ألوانها إذا لزم الأمر.

توفر معظم المكونات، مثل البطاقات والأزرار، كائنًا افتراضيًا يعرض واجهات للّون والمسقط الرأسي يمكن تعديله لتخصيص المكون:

val customCardColors = CardDefaults.cardColors(
    contentColor = MaterialTheme.colorScheme.primary,
    containerColor = MaterialTheme.colorScheme.primaryContainer,
    disabledContentColor = MaterialTheme.colorScheme.surface,
    disabledContainerColor = MaterialTheme.colorScheme.onSurface,
)
val customCardElevation = CardDefaults.cardElevation(
    defaultElevation = 8.dp,
    pressedElevation = 2.dp,
    focusedElevation = 4.dp
)
Card(
    colors = customCardColors,
    elevation = customCardElevation
) {
    // m3 card content
}

ويمكنك الاطّلاع على مزيد من المعلومات عن تخصيص المادة 3.

واجهة مستخدِم النظام

إنّ بعض جوانب Material You تأتي من النمط المرئي الجديد وواجهة مستخدم النظام على الإصدار 12 من Android والإصدارات الأحدث. هناك مجالان رئيسيان توجد فيهما التغييرات هما التموج والتمرير الزائد. لا يلزم اتخاذ أي إجراء إضافي لتنفيذ هذه التغييرات.

تمويج

يستخدم تطبيق Ripple الآن بريقًا خفيفًا لإضاءة الأسطح عند الضغط عليه. يستخدم Compose Material Ripple النظام الأساسي RippleDrawable للتحكّم في نظام التشغيل Android، لذلك تتوفّر ميزة "تموج البراق" في الإصدار 12 من نظام التشغيل Android والإصدارات الأحدث لجميع مكوّنات Material.

تمويج في M2 مقابل M3
الشكل 17. تمويج في M2 مقابل M3

التمرير الزائد

يستخدم التمرير الزائد الآن تأثير التوسيع عند حافة حاويات التمرير. تكون ميزة "التمرير الزائد" مفعَّلة تلقائيًا في العناصر القابلة للإنشاء لحاوية التمرير، على سبيل المثال، LazyColumn وLazyRow وLazyVerticalGrid، في الإصدار Compose Foundation 1.1.0 والإصدارات الأحدث، بغض النظر عن مستوى واجهة برمجة التطبيقات.

الانتقال الزائد باستخدام تأثير التمدّد عند حافة الحاوية
الشكل 18. الانتقال الزائد باستخدام تأثير التمدّد عند حافة الحاوية

تسهيل الاستخدام

تم تصميم معايير سهولة الوصول المضمنة في مكونات Material لتوفير أساس لتصميم المنتج الشامل. يمكن أن يؤدي فهم سهولة الوصول إلى المنتج إلى تحسين سهولة الاستخدام لجميع المستخدمين، بما في ذلك الأشخاص الذين يعانون من ضعف البصر أو العمى أو الإعاقات السمعية أو العجز الإدراكي أو الإعاقات الحركية أو الإعاقات الظرفية (مثل كسر الذراع).

تسهيل استخدام الألوان

تم تصميم اللون الديناميكي لتلبية معايير إمكانية الوصول لتباين الألوان. يعد نظام لوحات الدرجات اللونية أمرًا بالغ الأهمية لجعل أي نظام ألوان متاحًا بشكل افتراضي.

ويوفر نظام ألوان Material قيم درجات اللون والقياسات القياسية التي يمكن استخدامها لتحقيق نسب التباين التي يمكن الوصول إليها.

الرد على نموذج تطبيق: المنصات ذات الدرجات اللونية الأساسية والثانوية والثالثة (من الأعلى إلى الأسفل)
الشكل 19. الرد على نموذج تطبيق: لوحات الألوان الأساسية والثانوية والثلاثية (من الأعلى إلى الأسفل)

إنّ جميع مكوّنات Material والتصميمات الديناميكية تستخدم حاليًا أدوار الألوان المذكورة أعلاه من مجموعة من لوحات الألوان التي تم اختيارها لتلبية متطلبات تسهيل الاستخدام. ومع ذلك، إذا كنت تقوم بتخصيص المكونات، فتأكد من استخدام أدوار الألوان المناسبة وتجنب عدم التطابق.

يمكنك استخدام اللون الأساسي فوق الحاوية الأساسية، والحاوية الأساسية فوق الحاوية الأساسية، واستخدام نفس الشيء مع الألوان المحايدة واللكنة الأخرى لتوفير تباين يسهل الوصول إليه للمستخدم.

يمنح استخدام حاوية ثلاثية أعلى القائمة الأساسية زر تباين ضعيف للمستخدم:

// ✅ Button with sufficient contrast ratio
Button(
    onClick = { },
    colors = ButtonDefaults.buttonColors(
        containerColor = MaterialTheme.colorScheme.primary,
        contentColor = MaterialTheme.colorScheme.onPrimary
    )
) {
}

// ❌ Button with poor contrast ratio
Button(
    onClick = { },
    colors = ButtonDefaults.buttonColors(
        containerColor = MaterialTheme.colorScheme.tertiaryContainer,
        contentColor = MaterialTheme.colorScheme.primaryContainer
    )
) {
}

تباين كافٍ (لليسار) مقابل تباين ضعيف (يمين)
الشكل 20. التباين الكافي (اليسار) مقابل التباين الضعيف (اليمين)

سهولة الوصول إلى أسلوب الخط

يعمل مقياس النوع M3 على تحديث منحدر النوع الثابت وقيمه لتوفير إطار عمل مبسّط وديناميكي لفئات الحجم التي يمكن توسيعها على جميع الأجهزة.

على سبيل المثال، في الإصدار M3، يمكن تخصيص قيم مختلفة لشاشة العرض الصغيرة بناءً على سياق الجهاز، مثل الهاتف أو الجهاز اللوحي.

شاشات كبيرة الحجم

توفّر Material إرشادات حول التصاميم التكيُّفية والأجهزة القابلة للطي لتسهيل الوصول إلى التطبيقات وتحسين الجوانب المريحة للمستخدمين الذين لديهم أجهزة كبيرة.

يوفر Material أنواعًا مختلفة من التنقل لمساعدتك في تقديم تجربة مستخدم أفضل للأجهزة الكبيرة.

يمكنك معرفة المزيد من المعلومات حول إرشادات الشاشات الكبيرة لأجهزة Android والاطّلاع على نموذج الرد الخاص بالتصميم المتكيف الذي يسهل الوصول إليه.

مزيد من المعلومات

للمزيد من المعلومات حول تخصيص المواد في Compose، يمكنك الاطّلاع على المراجع التالية:

نماذج التطبيقات

مستندات Google

مرجع واجهة برمجة التطبيقات ورمز المصدر

الفيديوهات الطويلة