الموارد هي الملفات الإضافية والمحتوى الثابت الذي يستخدمه الرمز، مثل الصور النقطية وسلاسل واجهة المستخدم وتعليمات الرسوم المتحركة وغير ذلك.
يجب دائمًا فصل موارد التطبيق، مثل الصور والسلاسل، عن الرمز البرمجي، حتى تتمكّن من صيانتها بشكل مستقل. قدِّم أيضًا موارد بديلة لإعدادات أجهزة معيّنة من خلال تجميعها في أدلة موارد تحمل أسماء خاصة. أثناء وقت التشغيل، يستخدم Android المورد المناسب استنادًا إلى الإعدادات الحالية. على سبيل المثال، قد تحتاج إلى توفير سلاسل مختلفة استنادًا إلى إعدادات اللغة.
بعد نقل موارد تطبيقك إلى الخارج، يمكنك الوصول إليها باستخدام معرّفات الموارد التي يتم إنشاؤها في الفئة R الخاصة بمشروعك.
يوضّح لك هذا المستند كيفية تجميع الموارد في مشروع Android. توضّح لك هذه الصفحة أيضًا كيفية توفير موارد بديلة لإعدادات أجهزة معيّنة، ثم الوصول إليها من رمز تطبيقك أو ملفات XML الأخرى.
أنواع موارد المجموعة
ضَع كل نوع من أنواع الموارد في دليل فرعي محدّد من دليل res/ الخاص بمشروعك. على سبيل المثال، إليك التسلسل الهرمي للملفات في مشروع بسيط:
MyProject/
src/
MyActivity.kt
res/
drawable/
graphic.png
mipmap/
icon.png
values/
strings.xml
يحتوي الدليل res/ على جميع الموارد في أدلته الفرعية: مورد صورة ودليل mipmap/ لرموز مشغّل التطبيق وملف مصدر السلاسل النصية. أسماء أدلة الموارد مهمة، وهي موضّحة في الجدول 1.
ملاحظة: لمزيد من المعلومات حول استخدام مجلدات mipmap، يُرجى الاطّلاع على مقالة وضع رموز التطبيقات في أدلة mipmap.
الجدول 1. أدلة الموارد
المتاحة داخل دليل المشروع res/
| الدليل | نوع المورد |
|---|---|
drawable/ |
ملفات الصور النقطية (PNG أو
لمزيد من المعلومات، يُرجى الاطّلاع على الموارد القابلة للرسم. |
mipmap/ |
ملفات قابلة للرسم لكثافات مختلفة لرموز مشغّل التطبيق لمزيد من المعلومات حول إدارة رموز مشغّل التطبيقات باستخدام مجلدات mipmap/، يُرجى الاطّلاع على وضع رموز التطبيقات في أدلة mipmap. |
raw/ |
ملفات عشوائية لحفظها في شكلها الأولي لفتح هذه الموارد باستخدام ومع ذلك، إذا كنت بحاجة إلى الوصول إلى أسماء الملفات الأصلية والتسلسل الهرمي للملفات، ننصحك بحفظ الموارد في الدليل |
values/ |
ملفات XML التي تحتوي على قيم بسيطة، مثل السلاسل والأعداد الصحيحة والألوان في حين أنّ ملفات موارد XML في الأدلة الفرعية الأخرى بما أنّ كل مورد يتم تحديده باستخدام عنصر XML خاص به، يمكنك تسمية الملف بأي اسم تريده ووضع أنواع مختلفة من الموارد في ملف واحد. ومع ذلك، ولتوضيح الأمر، ننصحك بوضع أنواع الموارد الفريدة في ملفات مختلفة. على سبيل المثال، إليك بعض اصطلاحات أسماء الملفات الخاصة بالموارد التي يمكنك إنشاؤها في هذا الدليل:
لمزيد من المعلومات، اطّلِع على موارد السلاسل ومورد الأنماط والمزيد من أنواع الموارد. |
xml/ |
ملفات XML عشوائية يمكن قراءتها في وقت التشغيل من خلال استدعاء Resources.getXML يجب حفظ ملفات الإعداد المختلفة بتنسيق XML هنا.
|
font/ |
ملفات الخطوط التي تتضمّن امتدادات مثل TTF أو OTF أو TTC أو ملفات XML التي تتضمّن العنصر <font-family> لمزيد من المعلومات حول الخطوط كموارد، يُرجى الاطّلاع على إضافة خط كمورد XML.
|
تنبيه: لا تحفظ ملفات الموارد مباشرةً داخل الدليل res/. يؤدي ذلك إلى حدوث خطأ في برنامج التجميع.
الموارد التي تحفظها في الدلائل الفرعية المحدّدة في الجدول 1 هي مواردك التلقائية. أي أنّ هذه الموارد تحدّد التصميم والمحتوى التلقائيين لتطبيقك، إلا أنّ أنواع الأجهزة المختلفة التي تعمل بنظام التشغيل Android قد تتطلّب أنواعًا مختلفة من الموارد.
على سبيل المثال، يمكنك توفير موارد سلاسل مختلفة تترجم النص في واجهة المستخدم استنادًا إلى إعداد اللغة في الجهاز.
ملاحظة: في Compose، يتم تعريف واجهات المستخدم والرسوم المتحركة والألوان المستندة إلى الحالة في Kotlin، لذا أصبحت الدلائل
layout/ وmenu/ وanim/ وanimator/
وcolor/ قديمة بالنسبة إلى التطبيقات الحديثة. لمزيد من المعلومات، يُرجى الاطّلاع على الرسومات المتحركة في Compose وبنية السمة في Compose.
توفير مراجع بديلة
توفّر معظم التطبيقات موارد بديلة لتتوافق مع إعدادات أجهزة معيّنة. على سبيل المثال، أدرِج موارد رسومات قابلة للرسم بديلة لكثافات الشاشة المختلفة وموارد سلاسل بديلة للغات المختلفة. أثناء وقت التشغيل، يرصد نظام التشغيل Android إعدادات الجهاز الحالية ويحمّل الموارد المناسبة لتطبيقك.
لتحديد بدائل خاصة بمواصفات الأجهزة لمجموعة من الموارد، اتّبِع الخطوات التالية:
- أنشئ دليلاً جديدًا في
res/باسم<resources_name>-<qualifier>.<resources_name>هو اسم الدليل للموارد التلقائية المقابلة (المحدّدة في الجدول 1).<qualifier>هو اسم يحدّد إعدادًا فرديًا سيتم استخدام هذه الموارد له (محدّد في الجدول 2).
يمكنك إضافة أكثر من
<qualifier>. افصل بين كل واحد منها بشرطة.تنبيه: عند إضافة مؤهلات متعددة، يجب وضعها بالترتيب نفسه الذي تم إدراجها به في الجدول 2. إذا تم ترتيب المؤهلات بشكل غير صحيح، سيتم تجاهل المراجع.
- احفظ المراجع البديلة المناسبة في هذا الدليل الجديد. يجب أن تتطابق أسماء ملفات الموارد تمامًا مع أسماء ملفات الموارد التلقائية.
على سبيل المثال، إليك بعض المراجع التلقائية والبديلة:
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
يشير المؤهّل hdpi إلى أنّ الموارد الموجودة في هذا الدليل مخصّصة للأجهزة التي تحتوي على شاشة بدقة عالية. يتم تحديد حجم الصور في أدلة العناصر القابلة للرسم هذه لتناسب كثافات شاشة معيّنة، ولكن تكون أسماء الملفات متطابقة تمامًا. بهذه الطريقة، يكون معرّف المورد الذي تستخدمه للإشارة إلى صورة icon.png أو background.png هو نفسه دائمًا. يختار نظام التشغيل Android إصدار كل مورد الذي يتطابق على أفضل وجه مع الجهاز الحالي من خلال مقارنة معلومات إعدادات الجهاز بالمحدّدات في اسم دليل الموارد.
تنبيه: عند تحديد مورد بديل، احرص على تحديد المورد أيضًا في إعداد تلقائي. وإلا، قد يواجه تطبيقك استثناءات وقت التشغيل عند تغيير الجهاز لأحد الإعدادات. على سبيل المثال، إذا أضفت سلسلة إلى values-en فقط وليس إلى values، قد يواجه تطبيقك استثناء Resource Not Found عند تغيير المستخدم للغة النظام التلقائية.
يسرد الجدول 2 مؤهلات الضبط بترتيب الأسبقية. يمكنك إضافة مؤهلات متعددة إلى اسم دليل واحد من خلال الفصل بين كل مؤهل وآخر بشرطة. إذا كنت تستخدم مؤهّلات متعدّدة لدليل موارد، عليك إضافتها إلى اسم الدليل بالترتيب الذي تظهر به في الجدول.
الجدول 2. أسماء مؤهلات الإعداد
| الإعداد | قيم المؤهِّل | الوصف |
|---|---|---|
| رمز البلد ورمز الشبكة | أمثلة:mcc310mcc208-mnc00
|
رمز البلد المتنقل (MCC)، يليه اختياريًا رمز شبكة الجوّال (MNC) من شريحة SIM في الجهاز على سبيل المثال، إذا كان الجهاز يستخدم اتصالاً لاسلكيًا (أي أنّه هاتف GSM)، يتم الحصول على قيمتَي رمز البلد المتنقل (MCC) ورمز شبكة الجوّال (MNC) من شريحة SIM. يمكنك أيضًا استخدام رمز MCC وحده، مثلاً لتضمين مراجع قانونية خاصة ببلد معيّن في تطبيقك. وإذا كنت بحاجة إلى تحديد اللغة فقط، استخدِم أداة تحديد اللغة ونظام الكتابة (اختياري) والمنطقة (اختياري) بدلاً من ذلك. إذا كنت تستخدم مؤهِّل MCC وMNC، استخدِمهما بحذر واختبِر ما إذا كانا يعملان على النحو المتوقّع. اطّلِع أيضًا على حقلَي الإعداد |
| اللغة والبرنامج النصي (اختياري) والمنطقة (اختياري) | أمثلة:enfren-rUSfr-rFRfr-rCAb+enb+en+USb+es+419b+zh+Hantb+sr+Latn+RS |
يتم تحديد اللغة من خلال رمز اللغة المكوّن من حرفين وفق معيار ISO 639-1، ويمكن أن يتبعه بشكل اختياري رمز المنطقة المكوّن من حرفين وفق معيار ISO 3166-1-alpha-2 (يسبقه الحرف الرموز غير حساسة لحالة الأحرف. تُستخدَم البادئة أتاح نظام التشغيل Android 7.0 (المستوى 24 من واجهة برمجة التطبيقات) إمكانية استخدام علامات اللغة BCP 47، والتي يمكنك استخدامها لتحديد الموارد الخاصة باللغة والمنطقة. تتألف علامة اللغة من سلسلة من علامات فرعية واحدة أو أكثر، يحدّد كل منها نطاق اللغة المحدّد بواسطة العلامة الإجمالية. لمزيد من المعلومات عن علامات اللغة، راجِع علامات تحديد اللغات. لاستخدام علامة لغة BCP 47، عليك دمج يمكن أن يتغيّر رمز اللغة أثناء فترة استخدام تطبيقك إذا غيّر المستخدمون اللغة في إعدادات النظام. للحصول على معلومات حول كيفية تأثير ذلك في تطبيقك أثناء وقت التشغيل، راجِع مقالة التعامل مع تغييرات الإعدادات. للحصول على دليل كامل حول أقلمة تطبيقك للغات أخرى، يُرجى الاطّلاع على مقالة أقلمة تطبيقك. اطّلِع أيضًا على الطريقة |
| صيغة المخاطبة المناسبة نحويًا | masculinefeminineneuter |
جنس المستخدم النحوي تُستخدَم للغات التي تتضمّن صيغة مخاطبة مناسبة نحويًا. على سبيل المثال، إذا كنت بحاجة إلى توفير مراجع مختلفة للمستخدمين الذين يتحدثون الفرنسية، يمكنك استخدام أدلة مثل ما يلي:
اطّلِع على تخصيص واجهة مستخدم تطبيقك باستخدام الجنس النحوي. يمكنك أيضًا الاطّلاع على طريقة الضبط تمت إضافته في مستوى واجهة برمجة التطبيقات 34. |
| Wide Color Gamut |
widecgnowidecg
|
تمت إضافته في المستوى 26 من واجهة برمجة التطبيقات. راجِع أيضًا طريقة الضبط |
| نطاق عالي الديناميكية (HDR) |
highdrlowdr
|
تمت إضافته في المستوى 26 من واجهة برمجة التطبيقات. راجِع أيضًا طريقة الإعداد |
| وضع واجهة المستخدم |
cardesktelevisionappliancewatchvrheadset
|
تمت إضافة هذه الفئات في المستوى 8 من واجهة برمجة التطبيقات، وتمت إضافة التلفزيون في المستوى 13 من واجهة برمجة التطبيقات، وتمت إضافة الأجهزة المنزلية في المستوى 16 من واجهة برمجة التطبيقات، وتمت إضافة الساعات في المستوى 20 من واجهة برمجة التطبيقات، وتمت إضافة سماعات الواقع الافتراضي في المستوى 26 من واجهة برمجة التطبيقات. للحصول على معلومات حول كيفية استجابة تطبيقك عند إدخال الجهاز في قاعدة أو إزالته منها، يُرجى قراءة تحديد حالة ونوع قاعدة الشحن ومراقبتهما. ويمكن أن يتغيّر ذلك أثناء استخدام تطبيقك إذا وضع المستخدم الجهاز في قاعدة شحن. يمكنك تفعيل بعض هذه الأوضاع أو إيقافها باستخدام
|
| الوضع الليلي |
nightnotnight
|
تمت إضافته في مستوى واجهة برمجة التطبيقات 8. يمكن أن يتغير هذا الإعداد أثناء استخدام تطبيقك إذا تم ضبط الوضع الليلي على الوضع التلقائي (الإعداد التلقائي)، وفي هذه الحالة يتغير الوضع استنادًا إلى الوقت من اليوم. يمكنك تفعيل هذا الوضع أو إيقافه باستخدام |
| كثافة البكسل على الشاشة (نقطة لكل بوصة) |
ldpimdpihdpixhdpixxhdpixxxhdpinodpitvdpianydpinnndpi
|
تتوفّر نسبة تحجيم 3:4:6:8:12:16 بين الكثافات الأساسية الست (مع تجاهل كثافة tvdpi). وبالتالي، فإنّ صورة نقطية بمقاس 9×9 في ldpi تكون بمقاس 12×12 في mdpi، و18×18 في hdpi، و24×24 في xhdpi، وهكذا. ملاحظة: لا يعني استخدام معرّف الكثافة أنّ الموارد مخصّصة فقط للشاشات ذات الكثافة المحدّدة. إذا لم توفِّر موارد بديلة تتضمّن مؤهِّلات تتوافق بشكل أفضل مع إعدادات الجهاز الحالية، سيستخدم النظام الموارد التي تمثّل أفضل تطابق. لمزيد من المعلومات حول كيفية التعامل مع كثافات الشاشة المختلفة وكيفية تغيير Android لحجم الصور النقطية لتلائم الكثافة الحالية، راجِع نظرة عامة حول توافق الشاشة. |
| نوع شاشة اللمس |
notouchfinger
|
يمكنك أيضًا الاطّلاع على حقل الإعداد |
| مدى توفّر لوحة المفاتيح |
keysexposedkeyshiddenkeyssoft
|
إذا قدّمت موارد يمكن أن يتغيّر ذلك أثناء استخدام تطبيقك إذا فتح المستخدم لوحة مفاتيح خارجية. للحصول على معلومات حول كيفية تأثير ذلك في تطبيقك أثناء وقت التشغيل، راجِع مقالة التعامل مع تغييرات الإعدادات. اطّلِع أيضًا على حقلَي الإعداد |
| طريقة إدخال النص الأساسية |
nokeysqwerty12key
|
راجِع أيضًا حقل الإعداد |
| مدى توفّر مفتاح التنقّل |
navexposednavhidden
|
ويمكن أن يتغيّر ذلك أثناء استخدام تطبيقك إذا كشف المستخدم عن مفاتيح التنقّل. للحصول على معلومات حول كيفية تأثير ذلك في تطبيقك أثناء وقت التشغيل، راجِع مقالة التعامل مع تغييرات الإعدادات. اطّلِع أيضًا على حقل إعدادات |
| طريقة التنقّل الأساسية غير المستندة إلى اللمس |
nonavdpadtrackballwheel
|
راجِع أيضًا حقل الإعداد |
| إصدار النظام الأساسي (مستوى واجهة برمجة التطبيقات) | أمثلة:v3v4v7إلخ |
مستوى واجهة برمجة التطبيقات المتوافق مع الجهاز على سبيل المثال، |
ملاحظة: لا تتوافق بعض إصدارات Android مع جميع المؤهّلات. يؤدي استخدام أداة تحديد جديدة ضمنيًا إلى إضافة أداة تحديد إصدار النظام الأساسي حتى تتمكّن الأجهزة القديمة من تجاهلها. لتجنُّب حدوث أي مشاكل، عليك دائمًا تضمين مجموعة من الموارد التلقائية (مجموعة من الموارد بدون مؤهلات). لمزيد من المعلومات، راجِع القسم حول توفير أفضل توافق للأجهزة مع الموارد.
في تطبيقات Compose، لا تكون مؤهلات الإعدادات المتعلّقة بالتصميم والأبعاد مطلوبة. وعلى الرغم من أنّها لا تزال موجودة، يتم استبعادها من الجدول 2. وتشمل هذه المؤهلات: اتجاه التخطيط وأصغر عرض ومساحة العرض المتاحة ومساحة الارتفاع المتاحة وحجم الشاشة ونسبة عرض إلى ارتفاع الشاشة والشاشة الدائرية واتجاه الشاشة. للاطّلاع على الجدول الكامل لمحدّدات الإعداد حسب ترتيب الأولوية، راجِع نظرة عامة على موارد التطبيق (طرق العرض).
قواعد اسم المؤهّل
في ما يلي بعض القواعد المتعلّقة باستخدام أسماء مؤهِّلات الإعدادات:
- يمكنك تحديد مؤهلات متعددة لمجموعة واحدة من الموارد، مع الفصل بينها بشرطات. على سبيل المثال،
drawable-en-rUS-nightينطبق على الأجهزة التي تستخدم اللغة الإنجليزية الأمريكية في "الوضع الليلي". - يجب أن تكون المؤهلات بالترتيب الوارد في الجدول 2.
- غير صحيح:
drawable-hdpi-night/ - صحيح:
drawable-night-hdpi/
- غير صحيح:
- لا يمكن أن تكون أدلة الموارد البديلة متداخلة. على سبيل المثال، لا يمكنك استخدام
res/drawable/drawable-en/. - هذه القيم غير حساسة لحالة الأحرف. يحوّل برنامج تجميع الموارد أسماء الدليل إلى أحرف صغيرة قبل المعالجة لتجنُّب حدوث مشاكل في أنظمة الملفات غير الحساسة لحالة الأحرف. ويتم استخدام الأحرف الكبيرة في الأسماء لتسهيل قراءتها فقط.
- يمكن استخدام قيمة واحدة فقط لكل نوع من أنواع المؤهِّلات. على سبيل المثال، إذا أردت استخدام ملفات الرسومات القابلة للرسم نفسها لإسبانيا وفرنسا، لا يمكنك إنشاء دليل باسم
drawable-es-fr/. بدلاً من ذلك، تحتاج إلى دليلَين للموارد، مثلdrawable-es/وdrawable-fr/، يحتويان على الملفات المناسبة.
بعد حفظ الموارد البديلة في أدلة تحمل أسماء المؤهلات هذه، يطبِّق نظام التشغيل Android تلقائيًا الموارد في تطبيقك استنادًا إلى إعدادات الجهاز الحالية. في كل مرة يتم فيها طلب مورد، يبحث نظام التشغيل Android عن أدلة موارد بديلة تحتوي على ملف المورد المطلوب، ثم يعثر على المورد الأنسب.
إذا لم تتوفّر موارد بديلة تتطابق مع إعدادات جهاز معيّن، يستخدم نظام التشغيل Android الموارد التلقائية المناسبة، أي مجموعة الموارد الخاصة بنوع معيّن من الموارد التي لا تتضمّن محدّدًا لإعدادات الجهاز.
إنشاء موارد الأسماء المستعارة
عندما يكون لديك مورد تريد استخدامه في أكثر من إعداد واحد للجهاز، ولكنك لا تريد توفيره كمورد تلقائي، لن تحتاج إلى وضع المورد نفسه في أكثر من دليل واحد للموارد البديلة. بدلاً من ذلك، يمكنك إنشاء مورد بديل يعمل كاسم مستعار لمورد محفوظ في دليل الموارد التلقائي.
عناصر قابلة للرسم
على سبيل المثال، لنفترض أنّ لديك رمز تطبيق، icon.png، وتحتاج إلى نسخة فريدة منه للغات مختلفة. ومع ذلك، يجب أن تستخدم لغتان محليتان، وهما الإنجليزية الكندية والفرنسية الكندية، الإصدار نفسه. ليس عليك نسخ الصورة نفسها إلى دليل الموارد لكل من اللغة الإنجليزية الكندية والفرنسية الكندية.
بدلاً من ذلك، يمكنك حفظ الصورة المستخدَمة لكليهما بأي اسم غير
icon.png، مثل icon_ca.png، ووضعها في دليل res/drawable/ التلقائي. بعد ذلك، أنشئ ملف icon.xml في res/drawable-en-rCA/ وres/drawable-fr-rCA/ يشير إلى المرجع icon_ca.png باستخدام العنصر <bitmap>.
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/icon_ca" />
يتيح لك ذلك تخزين نسخة واحدة فقط من ملف PNG وملفَّين صغيرَين بتنسيق XML يشيران إليها.
بعد ذلك، يمكنك استخدام painterResource(R.drawable.icon) وسيختار النظام الملف المناسب عند رصد اللغة.
السلاسل والقيم البسيطة الأخرى
لإنشاء اسم مستعار لسلسلة حالية، استخدِم معرّف المورد للسلسلة المطلوبة كقيمة للسلسلة الجديدة:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello</string> <string name="hi">@string/hello</string> </resources>
أصبح المرجع R.string.hi الآن اسمًا بديلًا للمرجع R.string.hello.
تعمل القيم البسيطة الأخرى بالطريقة نفسها، مثل الألوان:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="red">#f00</color> <color name="highlight">@color/red</color> </resources>
الوصول إلى موارد تطبيقك
بعد توفير مرجع في تطبيقك، يمكنك تطبيقه من خلال الإشارة إلى معرّف المرجع. يتم تحديد جميع معرّفات الموارد في الفئة R الخاصة بمشروعك، والتي تنشئها الأداة aapt تلقائيًا.
عند تجميع تطبيقك، تنشئ aapt الفئة R التي تحتوي على معرّفات الموارد لجميع الموارد في الدليل res/. لكل نوع من أنواع الموارد، هناك فئة فرعية R، مثل R.drawable لجميع موارد الرسومات القابلة للرسم. ويحتوي كل مصدر من هذا النوع على عدد صحيح ثابت، مثل R.drawable.icon. هذا العدد الصحيح هو معرّف المورد الذي يمكنك استخدامه لاسترداد المورد.
على الرغم من أنّ الفئة R هي المكان الذي يتم فيه تحديد أرقام تعريف الموارد، ليس عليك البحث فيها للعثور على رقم تعريف مورد. يتألف معرّف المورد دائمًا مما يلي:
- نوع المورد: يتم تجميع كل مورد في "نوع"، مثل
stringأوdrawable. - اسم المورد، وهو اسم الملف باستثناء الامتداد
الوصول إلى الموارد في Compose
توفّر Jetpack Compose دوال مضمَّنة ومتوافقة مع العناصر القابلة للإنشاء للوصول إلى الموارد بشكل آمن.
- السلاسل:
stringResource(id = R.string.hello)
- عناصر قابلة للرسم:
painterResource(id = R.drawable.my_icon)
الوصول إلى المراجع في الرمز غير الخاص بواجهة المستخدم
إذا كنت بحاجة إلى الوصول إلى موارد خارج تسلسل واجهة المستخدم الهرمي، مثل ViewModel أو Repository أو Service في النظام، يمكنك حلّها باستخدام Context.
// Retrieve a localized string resource val greeting = context.getString(R.string.hello_world)
يمكنك أيضًا استرداد موارد فردية باستخدام طرق في Resources، والتي يمكنك الحصول على مثيل لها باستخدام getResources.
البنية
في ما يلي بنية الإشارة إلى أحد الموارد في الرمز البرمجي:
[<package_name>.]R.<resource_type>.<resource_name>
<package_name>هو اسم الحزمة التي يقع فيها المورد (ليس مطلوبًا عند الإشارة إلى موارد من الحزمة الخاصة بك).-
<resource_type>هو الفئة الفرعيةRلنوع المورد. <resource_name>هو إما اسم ملف المورد بدون إضافة أو قيمة السمةandroid:nameفي عنصر XML، وذلك للقيم البسيطة.
لمزيد من المعلومات حول كل نوع من أنواع الموارد وكيفية الإشارة إليها، يُرجى الاطّلاع على الموارد في Compose.
الوصول إلى الملفات الأصلية
على الرغم من أنّ هذا الإجراء غير شائع، قد تحتاج إلى الوصول إلى ملفاتك وأدلتك الأصلية. في حال استخدامها، لن تتمكّن من حفظ ملفاتك في res/، لأنّ الطريقة الوحيدة لقراءة مرجع من res/ هي استخدام معرّف المرجع. يمكنك بدلاً من ذلك حفظ الموارد في الدليل assets/.
لا يتم منح الملفات المحفوظة في الدليل assets/ معرّف موارد، وبالتالي لا يمكنك الرجوع إليها من خلال الفئة R أو من موارد XML. بدلاً من ذلك، يمكنك طلب البحث عن الملفات في الدليل assets/ كما تفعل في نظام الملفات العادي وقراءة البيانات الأولية باستخدام AssetManager.
ومع ذلك، إذا كان كل ما تحتاجه هو إمكانية قراءة البيانات الأولية (مثل ملف فيديو أو ملف صوتي)،
فاحفظ الملف في الدليل res/raw/ واقرأ مجموعة من وحدات البايت باستخدام
openRawResource.
الوصول إلى مراجع المنصة
يحتوي Android على عدد من الموارد العادية، مثل أنماط النظام والمظاهر. للوصول إلى هذه الموارد، يجب تحديد مرجع المورد باستخدام فئة حزمة android. على سبيل المثال:
painterResource(android.R.drawable.ic_menu_info_details).
توفير أفضل توافق للأجهزة مع الموارد
لكي يتوافق تطبيقك مع إعدادات أجهزة متعددة، من المهم جدًا أن توفّر دائمًا موارد تلقائية لكل نوع من الموارد التي يستخدمها تطبيقك.
على سبيل المثال، إذا كان تطبيقك يتيح استخدام عدة لغات، عليك دائمًا تضمين دليل values/ (يتم فيه حفظ السلاسل) بدون محدد اللغة والمنطقة. إذا وضعت جميع ملفات السلاسل في أدلة تتضمّن مؤهّلاً للغة والمنطقة، سيتعطّل تطبيقك عند تشغيله على جهاز مضبوط على لغة لا تتوافق مع السلاسل.
طالما أنّك توفّر موارد values/تلقائية، سيعمل تطبيقك بشكل سليم، حتى إذا لم يفهم المستخدم اللغة التي يعرضها. هذا أفضل من تعذُّر تشغيل التطبيق.
إنّ توفير الموارد التلقائية أمر مهم ليس فقط لأنّ تطبيقك قد يعمل على إعداد لم تتوقّعه، ولكن أيضًا لأنّ الإصدارات الجديدة من Android تضيف أحيانًا محدّدات إعداد لا تتوافق مع الإصدارات الأقدم. إذا كنت تستخدم مؤهِّل موارد جديدًا، ولكنك تحافظ على توافق الرمز مع الإصدارات الأقدم من Android، سيتعطّل تطبيقك عند تشغيله على إصدار أقدم من Android إذا لم توفّر موارد تلقائية، لأنّه لا يمكنه استخدام الموارد المسماة باستخدام مؤهِّل الموارد الجديد.
على سبيل المثال، إذا تم ضبط minSdkVersion على 4، وكنت تؤهّل جميع موارد الرسومات القابلة للرسم باستخدام الوضع الليلي (night أو notnight، اللذان تمت إضافتهما في مستوى واجهة برمجة التطبيقات 8)، لن يتمكّن الجهاز الذي يعمل بمستوى واجهة برمجة التطبيقات 4 من الوصول إلى موارد الرسومات القابلة للرسم وسيحدث تعطّل. في هذه الحالة، من المحتمل أنّك تريد أن تكون notnight هي الموارد التلقائية، لذا استبعِد هذا المؤهّل وضَع موارد الرسومات القابلة للرسم في drawable/ أو drawable-night/.
باختصار، لضمان أفضل توافق مع الأجهزة، عليك دائمًا توفير موارد تلقائية للموارد التي يحتاجها تطبيقك ليعمل بشكل سليم. بعد ذلك، أنشئ موارد بديلة لإعدادات أجهزة معيّنة باستخدام محدّدات الإعدادات.
هناك استثناء واحد لهذه القاعدة: إذا كان minSdkVersion لتطبيقك هو 4 أو أكثر، لن تحتاج إلى موارد رسومات قابلة للرسم تلقائية عند توفير موارد رسومات قابلة للرسم بديلة باستخدام أداة تحديد كثافة الشاشة. حتى بدون موارد رسومات قابلة للرسم تلقائية، يمكن لنظام التشغيل Android العثور على أفضل تطابق بين كثافات الشاشة البديلة وتغيير حجم الصور النقطية حسب الحاجة. ومع ذلك، للحصول على أفضل تجربة على جميع أنواع الأجهزة،
يجب توفير رسومات قابلة للرسم بديلة لجميع الأنواع الثلاثة من الكثافة.
كيفية عثور Android على أفضل مورد مطابق
عند طلب مرجع توفّر له بدائل، يختار نظام التشغيل Android المرجع البديل الذي سيتم استخدامه في وقت التشغيل، وذلك استنادًا إلى إعدادات الجهاز الحالية. لتوضيح كيفية اختيار Android لمورد بديل، لنفترض أنّ أدلة الرسومات القابلة للرسم التالية يحتوي كل منها على إصدارات مختلفة من الصور نفسها:
drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-night/ drawable-en-notouch-12key/ drawable-night-ldpi/ drawable-night-notouch-12key/
لنفترض أنّ إعدادات الجهاز هي كما يلي:
Locale = en-GB
Night mode = night
Screen pixel density = hdpi
Touchscreen type = notouch
Primary text input method = 12key
من خلال مقارنة إعدادات الجهاز بالموارد البديلة المتاحة، يختار نظام التشغيل Android عناصر قابلة للرسم من drawable-en-night.
يصل النظام إلى قراره بشأن الموارد التي سيستخدمها وفقًا للمنطق التالي:
الشكل 2: مخطط انسيابي يوضّح كيف يعثر Android على المورد الأنسب
- إزالة ملفات الموارد التي تتعارض مع إعدادات الجهاز
تمت إزالة الدليل
drawable-fr-rCA/لأنّه يتعارض مع اللغةen-GB.drawable/ drawable-en/
drawable-fr-rCA/drawable-en-night/ drawable-en-notouch-12key/ drawable-night-ldpi/ drawable-night-notouch-12key/استثناء: كثافة وحدات البكسل على الشاشة هي المؤهّل الوحيد الذي لا يتم استبعاده بسبب التناقض. على الرغم من أنّ كثافة الشاشة للجهاز هي hdpi، لا يتم استبعاد
drawable-night-ldpi/لأنّه يتم اعتبار كل كثافة شاشة مطابقة في هذه المرحلة. لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة حول توافق الشاشة. - ابحث عن مؤهّل الأولوية الأعلى التالي في القائمة (الجدول 2). (ابدأ برمز فئة التجّار).
- هل يتضمّن أي من أدلة الموارد هذا المؤهّل؟
- إذا كانت الإجابة "لا"، ارجع إلى الخطوة الثانية واطّلِع على المؤهّل التالي. في هذا المثال، الإجابة هي "لا" إلى أن يتم الوصول إلى مؤهّل اللغة.
- إذا كانت الإجابة بنعم، انتقِل إلى الخطوة الرابعة.
- إزالة أدلة الموارد التي لا تتضمّن هذا المؤهّل في هذا المثال، سيزيل النظام بعد ذلك جميع الأدلة التي لا تتضمّن مؤهّلاً للغة:
drawable/drawable-en/ drawable-en-night/ drawable-en-notouch-12key/drawable-night-ldpi/drawable-night-notouch-12key/استثناء: إذا كان المؤهّل المعنيّ هو كثافة وحدات البكسل في الشاشة، يختار نظام التشغيل Android الخيار الذي يتطابق بشكل كبير مع كثافة وحدات البكسل في شاشة الجهاز. بشكل عام، يفضّل نظام التشغيل Android تصغير حجم الصورة الأصلية الأكبر بدلاً من تكبير حجم الصورة الأصلية الأصغر. لمزيد من المعلومات، يُرجى الاطّلاع على نظرة عامة حول توافق الشاشة.
- كرِّر الخطوات اثنتين وثلاث وأربع إلى أن يتبقى دليل واحد فقط. في هذا المثال، يمثّل الوضع الليلي المؤهّل التالي الذي تتوفّر له أي نتائج مطابقة.
وبالتالي، يتم استبعاد المراجع التي لا تحدّد الوضع الليلي:
drawable-en/drawable-en-night/drawable-en-notouch-12key/الدليل المتبقي هو
drawable-en-night.
على الرغم من تنفيذ هذا الإجراء لكل مورد مطلوب، يحسّن النظام بعض جوانبه. أحد أشكال التحسين هذه هو أنّه بمجرد معرفة إعدادات الجهاز، قد يتم استبعاد الموارد البديلة التي لا يمكن أن تتطابق أبدًا. على سبيل المثال، إذا كانت لغة الإعداد هي الإنجليزية، لن يتم تضمين أي دليل موارد يحتوي على مؤهّل لغة مضبوط على لغة أخرى غير الإنجليزية في مجموعة الموارد التي يتم التحقّق منها (مع ذلك، سيظل دليل الموارد بدون مؤهّل اللغة مضمّنًا).
عند اختيار موارد استنادًا إلى مؤهلات حجم الشاشة، يستخدم النظام موارد مصمَّمة لشاشة أصغر من الشاشة الحالية إذا لم تتوفّر موارد تتطابق بشكل أفضل. على سبيل المثال، تستخدم الشاشة الكبيرة موارد الشاشة العادية إذا لزم الأمر.
ومع ذلك، إذا كانت الموارد المتاحة أكبر من الشاشة الحالية، لن يستخدمها النظام وسيتعطّل تطبيقك إذا لم تتطابق أي موارد أخرى مع إعدادات الجهاز. يحدث ذلك، على سبيل المثال، إذا تم وضع علامة xlarge على جميع موارد التصميم باستخدام المؤهِّل،
ولكن الجهاز يحتوي على شاشة عادية الحجم.
ملاحظة: إنّ الأولوية الخاصة بالمحدّد (في الجدول 2) أكثر أهمية من عدد المحدّدات التي تتطابق تمامًا مع الجهاز. في المثال السابق، في الخطوة الرابعة، يتضمّن الخيار الأخير في القائمة ثلاث مؤهلات تطابق الجهاز تمامًا (الوضع الليلي ونوع شاشة اللمس وطريقة الإدخال)، بينما يحتوي drawable-en على مَعلمة واحدة فقط تطابق (اللغة). ومع ذلك، فإنّ اللغة لها أولوية أعلى من هذه المؤهلات الأخرى، لذا يتم استبعاد drawable-night-notouch-12key.
مراجع إضافية
لمزيد من المعلومات حول موارد التطبيق، يُرجى الاطّلاع على المراجع الإضافية التالية: