الأنماط والمظاهر

تجربة طريقة ComposeAllowed
Jetpack Compose هي مجموعة أدوات واجهة المستخدم التي ننصح بها لنظام التشغيل Android. تعرَّف على كيفية التعامل معها في Compose.

تتيح لك الأنماط والمظاهر في Android فصل تفاصيل تصميم تطبيقك عن واجهة المستخدم. الهيكل والسلوك، على غرار أوراق الأنماط في تصميم الويب.

النمط عبارة عن مجموعة من السمات التي تحدد مظهر سمة واحدة View يمكن أن يحدد النمط السمات مثل لون الخط وحجمه ولون الخلفية وغير ذلك الكثير.

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

يتم تعريف الأنماط والمظاهر في ملف نمط الموارد في res/values/، يُطلق عليه عادةً اسم styles.xml.

الشكل 1. تم تطبيق موضوعين على نفس النشاط: Theme.AppCompat (اليسار) وTheme.AppCompat.Light (اليمين).

المظاهر مقابل الأنماط

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

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

يحدد المظهر مجموعة من الموارد المُعنونة التي يمكن الإشارة إليها باستخدام الأنماط أو التنسيقات والتطبيقات المصغّرة وهكذا. تعيِّن المظاهر أسماء دلالية، مثل colorPrimary، لنظام التشغيل Android. الموارد.

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

لمزيد من المعلومات حول كيفية عمل المظاهر والأنماط معًا، يمكنك الاطّلاع على مشاركة المدونة. نمط Android: المظاهر مقابل الأنماط

إنشاء نمط وتطبيقه

لإنشاء نمط جديد، افتح ملف res/values/styles.xml الخاص بمشروعك. بالنسبة لكل نمط تريد إنشاءه، اتبع الخطوات التالية:

  1. أضِف عنصر <style> باسم يعرّف النمط بشكل فريد.
  2. أضِف عنصر <item> لكل سمة نمط تريد تحديدها. تشير رسالة الأشكال البيانية name في كل عنصر يحدد سمة يمكنك استخدامها بخلاف ذلك كسمة XML في التصميم. ويجب أن تكون القيمة في العنصر <item> هي قيمة هذه السمة.

على سبيل المثال، لنفترض أنك حددت النمط التالي:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="GreenText" parent="TextAppearance.AppCompat">
        <item name="android:textColor">#00FF00</item>
    </style>
</resources>

يمكنك تطبيق النمط على طريقة عرض كما يلي:

<TextView
    style="@style/GreenText"
    ... />

يتم تطبيق كل سمة محددة في النمط على طريقة العرض هذه إذا قبلتها طريقة العرض. العرض يتجاهل أي سمات لا تقبلها.

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

توسيع نمط وتخصيصه

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

على سبيل المثال، يمكنك اكتساب مظهر النص التلقائي لنظام Android الأساسي وتعديله التالي:

<style name="GreenText" parent="@android:style/TextAppearance">
    <item name="android:textColor">#00FF00</item>
</style>

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

ولاكتساب الأنماط من مكتبة أو من مشروعك الخاص، عليك الإفصاح عن اسم النمط الرئيسي. بدون الجزء @android:style/ الموضح في المثال السابق. على سبيل المثال: يكتسب المثال التالي أنماط مظهر النص من "مكتبة الدعم":

<style name="GreenText" parent="TextAppearance.AppCompat">
    <item name="android:textColor">#00FF00</item>
</style>

يمكنك أيضًا اكتساب أنماط - باستثناء الأنماط من النظام الأساسي - عن طريق توسيع نمط بدلاً من استخدام سمة parent بدلاً من استخدام علامة النقطة. أي أن تبدأ بالبادئة اسم النمط مع اسم النمط الذي تريد أن يكتسبه، مفصولاً بنقطة. إِنْتَ يتم ذلك عادةً فقط عند توسيع أنماطك الخاصة، وليس الأنماط من المكتبات الأخرى. على سبيل المثال: يكتسب النمط التالي جميع الأنماط من GreenText في المثال السابق ثم تزيد حجم النص:

<style name="GreenText.Large">
    <item name="android:textSize">22dp</item>
</style>

يمكنك الاستمرار في اكتساب مثل هذه الأنماط لعدد من المرّات حسبما تريد من خلال التسلسل على المزيد من الأسماء.

للعثور على السمات التي يمكنك الإفصاح عنها باستخدام علامة <item>، يُرجى الرجوع إلى ملف XML السمات" في مراجع الصف المختلفة. إتاحة كل المشاهدات سمات XML من القاعدة View class، وتضيف العديد من طرق العرض سماتها الخاصة. على سبيل المثال، سمات XML TextView تضمين android:inputType يمكنك تطبيقها على عرض نص يتلقى إدخالات، مثل التطبيق المصغّر EditText.

تطبيق نمط كمظهر

يمكنك إنشاء مظهر بالطريقة نفسها التي تنشئ بها الأنماط. يكمن الاختلاف في كيفية تطبيقه: بدلاً من تطبيق نمط باستخدام السمة style في طريقة عرض، يمكنك تطبيق مظهر باستخدام السمة android:theme على العلامة <application> أو علامة <activity> في ملف AndroidManifest.xml.

على سبيل المثال، إليك كيفية تطبيق التصميم المتعدد الأبعاد "داكن" في مكتبة دعم Android مظهر على التطبيق بأكمله:

<manifest ... >
    <application android:theme="@style/Theme.AppCompat" ... >
    </application>
</manifest>

وإليك كيفية تطبيق "الإضاءة" موضوع واحد فقط وهو:

<manifest ... >
    <application ... >
        <activity android:theme="@style/Theme.AppCompat.Light" ... >
        </activity>
    </application>
</manifest>

تطبّق كل طريقة عرض في التطبيق أو النشاط الأنماط التي تتوافق مع الأنماط المحدّدة في موضوع معين. إذا كانت طريقة العرض تتوافق فقط مع بعض السمات المعرَّفة في النمط، سيتم تطبيقها فقط تلك السمات ويتجاهل تلك التي لا تدعمها.

بدءًا من الإصدار 5.0 من نظام التشغيل Android (المستوى 21 من واجهة برمجة التطبيقات) والإصدار 22.1 من Android Support Library، يمكنك أيضًا تحديد سمة android:theme إلى طريقة عرض في ملف التنسيق. يؤدي هذا إلى تعديل مظهر طريقة العرض هذه وأي طرق عرض فرعية، وهي مفيدة لتغيير لوحات ألوان المظاهر في قائمة من واجهتك.

توضّح الأمثلة السابقة كيفية تطبيق مظهر، مثل Theme.AppCompat هما. التي تقدمها مكتبة دعم Android. ولكنّك تحتاج عادةً إلى تخصيص المظهر ليلائم العلامة التجارية لتطبيقك. وأفضل طريقة للقيام بذلك هي توسيع هذه الأنماط من Support Library تجاوز بعض السمات، كما هو موضح في القسم التالي.

التسلسل الهرمي للأنماط

يوفّر Android طُرقًا متعدّدة لضبط السمات في تطبيق Android. على سبيل المثال: يمكنك تعيين السمات مباشرةً في تخطيط، وتطبيق نمط على طريقة عرض، وتطبيق مظهر على التخطيط، حتى تعيين السمات آليًا.

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

  1. تطبيق تصميم على مستوى الأحرف أو الفقرة باستخدام امتدادات النص على مشتق من TextView الصفوف.
  2. تطبيق السمات آليًا.
  3. تطبيق سمات فردية مباشرةً على ملف شخصي.
  4. تطبيق نمط على طريقة عرض.
  5. النمط التلقائي.
  6. تطبيق مظهر على مجموعة من المشاهدات أو نشاط أو على تطبيقك بالكامل
  7. تطبيق نمط معين خاص بالملف الشخصي، مثل تعيين TextAppearance في TextView.

الشكل 2. يؤدي التصميم من span إلى إلغاء النمط من textAppearance

مظهر النص

من القيود المفروضة على الأنماط أنّه يمكنك تطبيق نمط واحد فقط على View. في TextView، ومع ذلك، يمكنك أيضًا تحديد السمة TextAppearance يعمل بشكل مشابه لأحد الأنماط، كما هو موضح في المثال التالي:

<TextView
    ...
    android:textAppearance="@android:style/TextAppearance.Material.Headline"
    android:text="This text is styled via textAppearance!" />

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

يتيح TextAppearance مجموعة فرعية من سمات التصميم التي TextView على مستوى خدمات Google. للاطلاع على قائمة السمات الكاملة، راجع TextAppearance

بعض سمات TextView الشائعة غير المضمّنة هي lineHeight[Multiplier|Extra], lines, breakStrategy، hyphenationFrequency. تعمل TextAppearance على مستوى الأحرف وليس على مستوى الفقرة، لذا لا يتم دعم السمات التي تؤثر في التخطيط بأكمله.

تخصيص المظهر التلقائي

عند إنشاء مشروع باستخدام "استوديو Android"، يتم تطبيق مظهر "التصميم المتعدد الأبعاد" على تطبيقك من خلال تلقائيًا، كما هو موضح في ملف styles.xml الخاص بمشروعك. النمط AppTheme هذا لتوسيع مظهر من مكتبة الدعم وتضمين إلغاءات لسمات الألوان المستخدمة حسب عناصر واجهة المستخدم الرئيسية، مثل شريط التطبيق زر الإجراء العائم، إذا كان مستخدَمًا. لذا، ينبغي أن تخصيص تصميم ألوان التطبيق بسرعة من خلال تعديل الألوان المقدَّمة.

على سبيل المثال، يبدو ملف styles.xml مشابهًا لما يلي:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

قيم النمط هي في الواقع إشارات إلى color resources، محددة في لملف res/values/colors.xml الخاص بالمشروع. هذا هو الملف الذي تعدِّله لتغيير الألوان. يمكنك الاطّلاع على نظرة عامة على الألوان في التصميم المتعدد الأبعاد لتحسين تجربة المستخدم باستخدام ألوان ديناميكية وألوان مخصّصة إضافية.

بعد معرفة الألوان، عدِّل القيم في res/values/colors.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--   Color for the app bar and other primary UI elements. -->
    <color name="colorPrimary">#3F51B5</color>

    <!--   A darker variant of the primary color, used for
           the status bar (on Android 5.0+) and contextual app bars. -->
    <color name="colorPrimaryDark">#303F9F</color>

    <!--   a secondary color for controls like checkboxes and text fields. -->
    <color name="colorAccent">#FF4081</color>
</resources>

ويمكنك بعد ذلك إلغاء أي أنماط أخرى تريدها. على سبيل المثال، يمكنك تغيير النشاط لون الخلفية على النحو التالي:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    ...
    <item name="android:windowBackground">@color/activityBackground</item>
</style>

للحصول على قائمة بالسمات التي يمكنك استخدامها في المظهر، يمكنك الاطّلاع على جدول السمات على R.styleable.Theme عند الإضافة لطرق العرض في التخطيط الخاص بك، يمكنك أيضًا العثور على السمات من خلال النظر في "سمات XML" في عرض مراجع الفئة. على سبيل المثال، تتوافق جميع طرق العرض سمات XML من القاعدة View الصف.

يتم تطبيق معظم السمات على أنواع معيّنة من الملفات الشخصية، وينطبق بعضها على جميع الملفات الشخصية. ومع ذلك، بعض سمات الموضوعات المدرجة في تسري R.styleable.Theme على نافذة النشاط، وليس طرق العرض في التخطيط. على سبيل المثال، تُغيّر windowBackground تحدد خلفية النافذة وwindowEnterTransition حركة انتقالية لاستخدامها عند يبدأ النشاط. لمزيد من التفاصيل، يُرجى الاطّلاع على بدء. نشاط باستخدام صورة متحركة.

توفّر مكتبة دعم Android أيضًا سمات أخرى يمكنك استخدامها لتخصيص المظهر. تم تمديدها من Theme.AppCompat، مثل السمة colorPrimary المعروضة في المثال السابق. تحقّق هذه الفيديوهات أفضل مشاهدة في ملف attrs.xml في المكتبة.

هناك أيضًا مظاهر مختلفة متاحة من مكتبة الدعم قد ترغب في توسيعها بدلاً من تلك المعروضة في المثال السابق. أفضل مكان لرؤية الموضوعات المتاحة هو الـ ملف themes.xml في المكتبة.

إضافة أنماط خاصة بالإصدار

إذا أضاف إصدار جديد من Android سمات المظهر التي تريد استخدامها، يمكنك إضافتها إلى المظهر. مع الحفاظ على توافقها مع الإصدارات القديمة. كل ما تحتاج إليه هو ملف styles.xml آخر في دليل values يتضمن الحقل إصدار المورد المؤهِّل:

res/values/styles.xml        # themes for all versions
res/values-v21/styles.xml    # themes for API level 21+ only

بما أنّ الأنماط في ملف values/styles.xml متوفِّرة لجميع الإصدارات، يمكن أن تكتسبها المظاهر في values-v21/styles.xml. هذا يعني أنه يمكنك تجنب تكرار الأنماط بالبدء بـ "base" ثم توسيعها في الإصدار الأنماط.

على سبيل المثال، لتوضيح عمليات نقل النوافذ للإصدار 5.0 (المستوى 21 من واجهة برمجة التطبيقات) والإصدارات الأحدث، يجب لاستخدام سمات جديدة. لذلك، يمكن أن يبدو المظهر الأساسي في res/values/styles.xml بالشكل التالي: التالي:

<resources>
    <!-- Base set of styles that apply to all versions. -->
    <style name="BaseAppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="colorPrimary">@color/primaryColor</item>
        <item name="colorPrimaryDark">@color/primaryTextColor</item>
        <item name="colorAccent">@color/secondaryColor</item>
    </style>

    <!-- Declare the theme name that's actually applied in the manifest file. -->
    <style name="AppTheme" parent="BaseAppTheme" />
</resources>

بعد ذلك، أضِف الأنماط الخاصة بالإصدار في res/values-v21/styles.xml على النحو التالي:

<resources>
    <!-- extend the base theme to add styles available only with API level 21+ -->
    <style name="AppTheme" parent="BaseAppTheme">
        <item name="android:windowActivityTransitions">true</item>
        <item name="android:windowEnterTransition">@android:transition/slide_right</item>
        <item name="android:windowExitTransition">@android:transition/slide_left</item>
    </style>
</resources>

يمكنك الآن تطبيق AppTheme في ملف البيان، وسيختار النظام الأنماط لكل إصدار من إصدارات النظام.

لمزيد من المعلومات حول استخدام الموارد البديلة للأجهزة المختلفة، يُرجى الاطّلاع على توفير موارد بديلة:

تخصيص أنماط التطبيقات المصغّرة

لكل تطبيق مصغّر في إطار العمل ومكتبة الدعم نمط تلقائي. على سبيل المثال، عند تصميم تطبيقك باستخدام مظهر من مكتبة الدعم، وهو مثال على تم تصميم Button باستخدام النمط Widget.AppCompat.Button. إذا كنت ترغب في تطبيق نمط أداة مختلف على يمكنك إجراء ذلك باستخدام السمة style في ملف التنسيق. على سبيل المثال، فيما يلي يطبق نمط زر المكتبة بلا حدود:

<Button
    style="@style/Widget.AppCompat.Button.Borderless"
    ... />

إذا أردت تطبيق هذا النمط على جميع الأزرار، فيمكنك تعريفه في قسم buttonStyle على النحو التالي:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="buttonStyle">@style/Widget.AppCompat.Button.Borderless</item>
    ...
</style>

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

مصادر إضافية

لمزيد من المعلومات حول المظاهر والأنماط، اطّلِع على المراجع الإضافية التالية:

مشاركات المدونة