0Pricing
Android Academy · درس

Themes وStyles

عرّفوا Styles قابلة لإعادة الاستخدام لعناصر الواجهة وThemes لتطبيقكم. أعدّوا أدوار الألوان في Material 3 ومقياس الطباعة والخطوط المخصّصة والوضع الداكن.

Themes وStyles درس مجاني في Android Academy على CoddyKit. هذا هو الدرس 2 من أصل 5. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Android Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Android Academy 5 دروس في المجموع.

الأنماط في مقابل السمات

مفهومان يختلطان غالبًا:

  • النمط — مجموعة من سمات العرض تُطبّق على عنصر واجهة واحد، مثل حجم النص واللون والحشو. ويُضبط باستخدام style="@style/MyButton".
  • السمة — مجموعة من السمات الدلالية تُطبّق على Activity أو التطبيق. تبحث العروض عن سمات السمة باستخدام ?attr/colorPrimary.

تعريف نمط

أنشئ الأنماط في res/values/styles.xml. ويمكن للأنماط أن ترث من نمط أب:

<!-- res/values/styles.xml -->
<resources>
    <style name="TitleText" parent="TextAppearance.Material3.HeadlineMedium">
        <item name="android:textColor">@color/on_surface</item>
        <item name="android:fontFamily">@font/roboto_bold</item>
    </style>

    <style name="PrimaryButton" parent="Widget.Material3.Button">
        <item name="android:paddingHorizontal">24dp</item>
        <item name="cornerRadius">8dp</item>
    </style>
</resources>

<!-- Using a style in XML: -->
<TextView
    style="@style/TitleText"
    android:text="Hello!" />

تعريف سمة

ترث السمات من سمة أب في Material 3 وتتجاوز سمات الألوان والأشكال:

<!-- res/values/themes.xml -->
<resources>
    <style name="Theme.MyApp" parent="Theme.Material3.DayNight.NoActionBar">
        <!-- Color -->
        <item name="colorPrimary">@color/primary</item>
        <item name="colorOnPrimary">@color/on_primary</item>
        <item name="colorSecondary">@color/secondary</item>
        <item name="colorSurface">@color/surface</item>
        <item name="colorBackground">@color/background</item>

        <!-- Typography -->
        <item name="textAppearanceBodyMedium">@style/BodyMedium</item>

        <!-- Shape -->
        <item name="shapeAppearanceMediumComponent">@style/Shape.Medium</item>
    </style>
</resources>

نظام الألوان في Material 3

يستخدم Material 3 أدوارًا دلالية للألوان بدلًا من قيم hex الخام. ومن الأدوار الأساسية:

  • colorPrimary — لون العلامة التجارية الأساسي
  • colorOnPrimary — النصوص والأيقونات على الخلفية الأساسية
  • colorSecondary — لون التمييز
  • colorSurface — خلفيات البطاقات والألواح
  • colorError — حالات الخطأ
  • colorBackground — خلفية النافذة

موارد الألوان

عرّف الألوان في res/values/colors.xml:

<!-- res/values/colors.xml -->
<resources>
    <color name="primary">#6750A4</color>
    <color name="on_primary">#FFFFFF</color>
    <color name="secondary">#625B71</color>
    <color name="on_secondary">#FFFFFF</color>
    <color name="surface">#FFFBFE</color>
    <color name="background">#FFFBFE</color>
    <color name="error">#B3261E</color>
</resources>

السمة الداكنة

تتعامل سمات Material 3 بنمط DayNight مع الوضع الداكن تلقائيًا. أضف إصدارًا خاصًا بالوضع الليلي للألوان:

<!-- res/values-night/colors.xml  (night override) -->
<resources>
    <color name="primary">#D0BCFF</color>
    <color name="on_primary">#381E72</color>
    <color name="surface">#1C1B1F</color>
    <color name="background">#1C1B1F</color>
</resources>

// Switch dark mode programmatically:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)   // force dark
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)    // force light
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM) // auto

الطباعة

يحدد Material 3 مقياسًا طباعيًا. استخدم سمات textAppearance للحفاظ على اتساق النص:

<TextView
    android:textAppearance="?attr/textAppearanceDisplayLarge"
    android:text="Big Title" />

<TextView
    android:textAppearance="?attr/textAppearanceHeadlineMedium"
    android:text="Section Header" />

<TextView
    android:textAppearance="?attr/textAppearanceBodyMedium"
    android:text="Body text content here" />

<TextView
    android:textAppearance="?attr/textAppearanceLabelSmall"
    android:text="Caption" />

الخطوط المخصصة

أضف خطًا إلى res/font/ وأشر إليه من سمتك أو نمطك:

<!-- res/font/my_font.xml — font family -->
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
    <font app:fontStyle="normal" app:fontWeight="400"
          app:font="@font/roboto_regular" />
    <font app:fontStyle="normal" app:fontWeight="700"
          app:font="@font/roboto_bold" />
</font-family>

<!-- Apply to a style: -->
<style name="Theme.MyApp" parent="...">
    <item name="android:fontFamily">@font/my_font</item>
</style>

تطبيق سمة على Activity

اضبط السمة في AndroidManifest.xml. ويمكنك استخدام سمة مختلفة لكل Activity:

<!-- AndroidManifest.xml -->
<application
    android:theme="@style/Theme.MyApp">

    <!-- Different theme for splash screen -->
    <activity
        android:name=".SplashActivity"
        android:theme="@style/Theme.MyApp.Splash" />

    <activity
        android:name=".MainActivity" />
</application>

قراءة سمات السمة في التعليمات البرمجية

يمكنك الوصول إلى أي سمة من سمات السمة في تعليمات Kotlin البرمجية أثناء التشغيل:

fun getColorFromTheme(context: Context, attrResId: Int): Int {
    val typedValue = TypedValue()
    context.theme.resolveAttribute(attrResId, typedValue, true)
    return typedValue.data
}

// Usage:
val primaryColor = getColorFromTheme(this, com.google.android.material.R.attr.colorPrimary)
binding.myView.setBackgroundColor(primaryColor)

Material Theme Builder

استخدم Material Theme Builder (m3.material.io/theme-builder) لإنشاء نظام ألوان كامل لـ Material 3 انطلاقًا من لون علامتك التجارية. ويصدّر ملفات XML جاهزة للاستخدام لكل من colors.xml وthemes.xml. وهذه أسرع طريقة للحصول على نظام تصميم متسق.

تحقق سريع

ما الفرق الأساسي بين Style وTheme في Android؟

مراجعة: السمات والأنماط

يبدأ التصميم المتسق من هنا:

  • الأنماط — سمات على مستوى عنصر الواجهة، قابلة لإعادة الاستخدام عبر العديد من العروض
  • السمات — سمات على مستوى التطبيق أو Activity، مع أدوار دلالية للألوان
  • أدوار ألوان Material 3: colorPrimary وcolorSurface وcolorError وغير ذلك
  • الوضع الداكن عبر values-night/colors.xml + MODE_NIGHT_FOLLOW_SYSTEM
  • مقياس الطباعة عبر سمات textAppearance
  • استخدم Material Theme Builder لإنشاء أنظمة الألوان بسرعة

التالي: رسم عروض مخصصة من البداية.

الأسئلة الشائعة

هل درس «Themes وStyles» مجاني؟

نعم — نص درس «Themes وStyles» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Android Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Android Academy 5 دروس في المجموع.

ماذا ستتعلم في «Themes وStyles»؟

عرّفوا Styles قابلة لإعادة الاستخدام لعناصر الواجهة وThemes لتطبيقكم. أعدّوا أدوار الألوان في Material 3 ومقياس الطباعة والخطوط المخصّصة والوضع الداكن. تتمرن على Android Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Android Academy؟

لا تُشترط خبرة سابقة. Android Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 5.

كم من الوقت يستغرق درس «Themes وStyles»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Android Academy هذا؟

نعم. كل درس في Android Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. أساسيات Material Design
  2. Themes وStyles
  3. واجهات مخصّصة
  4. الرسوم المتحركة والانتقالات
  5. التنقّل السفلي وعلامات التبويب
← العودة إلى Android Academy