نظرة عامة على مراجع التطبيقات

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

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

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

تجميع أنواع المراجع

ضع كل نوع من الموارد في دليل فرعي محدد من جدول مشروعك دليل res/. على سبيل المثال، إليك التسلسل الهرمي للملفات لمشروع بسيط:

MyProject/
    src/
        MyActivity.java
    res/
        drawable/
            graphic.png
        layout/
            main.xml
            info.xml
        mipmap/
            icon.png
        values/
            strings.xml

يتضمّن الدليل res/ جميع الموارد في أدلة فرعية: مورد صور، وموارد تنسيق، دليل mipmap/ لمشغِّل التطبيقات والأيقونات وملف موارد السلسلة. المورد أسماء الأدلة مهمة ويتم توضيحها في الجدول 1.

ملاحظة: لمزيد من المعلومات حول استخدام مجلدات mipmap، يُرجى الاطّلاع على ضَع رموز التطبيقات في أدلة mipmap.

الجدول 1. أدلة الموارد داخل دليل المشروع res/.

الدليل نوع المورِد
animator/ ملفات XML التي تعرّف الخاصية والرسوم المتحركة.
anim/ ملفات XML التي تعرّف ما قبل سن المراهقة والرسوم المتحركة. يمكن أيضًا حفظ الرسوم المتحركة للخصائص في هذا الدليل، ولكن يُفضّل استخدام دليل animator/ للإشارة إلى الصور المتحركة للسمات من أجل التمييز بين الاثنين الأنواع.
color/ ملفات XML التي تحدّد قائمة حالة من الألوان لمزيد من المعلومات، يُرجى الاطّلاع على اللون مورد قائمة الولايات.
drawable/

ملفات الصور النقطية (PNG أو .9.png أو JPG أو GIF) أو ملفات XML التي يتم تجميعها في الأنواع الفرعية التالية للموارد القابلة للرسم:

  • ملفات الصور النقطية
  • تسع رقعات (صور نقطية يمكن تغيير حجمها)
  • قوائم الولايات
  • الأشكال
  • رسومات متحركة قابلة للرسم
  • عناصر أخرى قابلة للرسم

لمزيد من المعلومات، يُرجى الاطّلاع على الموارد القابلة للرسم.

mipmap/ ملفات قابلة للرسم لكثافات رموز مشغّل التطبيقات المختلفة لمزيد من المعلومات حول إدارة رموز مشغّل التطبيقات مع mipmap/ مجلد، يمكنك الاطّلاع على ضع أيقونات التطبيقات في أدلة mipmap.
layout/ ملفات XML التي تحدّد تنسيق واجهة المستخدم لمزيد من المعلومات، يُرجى الاطّلاع على مورد التنسيق.
menu/ ملفات XML التي تحدد قوائم التطبيقات، مثل قائمة الخيارات أو قائمة السياق أو القائمة الفرعية. لمزيد من المعلومات، يُرجى الاطّلاع على مورد القائمة.
raw/

الملفات العشوائية التي يتم حفظها في شكلها الأولي. لفتح هذه الموارد باستخدام قائمة InputStream، مكالمة Resources.openRawResource() برقم تعريف المورد، وهو R.raw.filename.

ومع ذلك، إذا كنت بحاجة إلى الوصول إلى أسماء الملفات الأصلية والتسلسل الهرمي للملفات، حفظ الموارد في دليل assets/ بدلاً من res/raw/. لم يتم منح الملفات في assets/ معرِّف المورد، لذا يمكنك فقط قراءتها باستخدام AssetManager.

values/

ملفات XML التي تحتوي على قيم بسيطة، مثل السلاسل والأعداد الصحيحة والألوان

في حين أنّ ملفات موارد XML في الأدلة الفرعية الأخرى لبرامج res/ تحدّد موردًا واحدًا. استنادًا إلى اسم ملف XML، تصف الملفات في الدليل values/ موارد متعددة. وبالنسبة إلى أي ملف في هذا الدليل، فإن كل عنصر ثانوي للعنصر <resources> يعرّف عنصرًا المصدر. على سبيل المثال، ينشئ عنصر <string> سمة ينشئ مورد R.string والعنصر <color> R.color المصدر.

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

لمزيد من المعلومات، يُرجى الاطّلاع على موارد السلسلة، مرجع الأنماط مزيد من أنواع المراجع

xml/ ملفات XML عشوائية يمكن قراءتها في وقت التشغيل من خلال طلب Resources.getXML(). ملفات إعداد XML متعددة هنا، مثل إعدادات البحث.
font/ ملفات الخطوط ذات الامتدادات مثل TTF وOTF أو ملفات TTC أو XML التي تتضمَّن العنصر <font-family>. لمزيد من المعلومات عن والخطوط كموارد، فتحقق إضافة خط كمورد XML

تنبيه: ننصحك بعدم حفظ ملفات الموارد مباشرةً داخل دليل res/. يتسبب في خطأ في برنامج التجميع.

لمزيد من المعلومات حول أنواع الموارد الفردية، يُرجى الاطّلاع على نظرة عامة على أنواع الموارد.

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

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

توفير مراجع بديلة

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

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

لتحديد بدائل خاصة بالتهيئة لمجموعة من الموارد، قم بما يلي:

  1. إنشاء دليل جديد في res/ باسم في النموذج <resources_name>-<qualifier>
    • <resources_name> هو اسم الدليل للإعدادات التلقائية المقابلة. الموارد (محددة في الجدول 1).
    • <qualifier> هو اسم يحدّد إعدادات فردية التي سيتم استخدام هذه الموارد لها (محدد في الجدول 2).

    يمكنك إضافة أكثر من <qualifier> واحد. فصل كل واحد بشرطة.

    تنبيه: عند إلحاق عدّة مؤهِّلات، عليك: ووضعها بنفس الترتيب الذي تم إدراجها به في الجدول 2. إذا كانت المؤهلات مرتبة بشكل غير صحيح، يتم تجاهل الموارد.

  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. مؤهِّل الإعدادات الأسماء.

الإعدادات قِيم المؤهِّل الوصف
مركز عملائي وMNC أمثلة:
mcc310
mcc310-mnc004
mcc208-mnc00

رمز بلد الجوّال (مركز عملائي)، متبوعًا برمز شبكة الجوّال (MNC) اختياريًا من شريحة SIM في الجهاز. على سبيل المثال، نطاق mcc310 يستخدم في الولايات المتحدة على أي شركة نقل، تتعامل شركة mcc310-mnc004 مع الولايات المتحدة ضمن شركة Verizon وmcc208-mnc00 في فرنسا. برتقالي

إذا كان الجهاز يستخدم اتصالاً لاسلكيًا (أي أنه هاتف GSM)، فإن قيم مركز عملائي وMNC تصبح من شريحة SIM.

ويمكنك أيضًا استخدام حساب "مركز عملائي" وحده، على سبيل المثال، لتضمين معايير قانونية والموارد في تطبيقك. إذا كنت تريد التحديد استنادًا إلى اللغة فقط، فاستخدم مؤهِّل اللغة والنص البرمجي (اختياري) والمنطقة (اختياري) بدلاً من ذلك. إذا كنت تستخدم حساب "مركز عملائي" مؤهل MNC، قم بذلك بعناية واختبر أنه يعمل على النحو المتوقع.

اطّلِع أيضًا على حقلَي الإعداد mcc وmnc اللذان يشيران إلى رمز البلد الحالي المتوافق مع الأجهزة الجوّالة. ورمز شبكة الجوال على التوالي.

اللغة والنص (اختياري) والمنطقة (اختياري) أمثلة:
en
fr
en-rUS
fr-rFR
fr-rCA
b+en
b+en+US
b+es+419
b+zh+Hant
b+sr+Latn+RS

يتم تحديد اللغة برمز لغة مكوّن من حرفَين وفقًا لمعيار ISO 639-1، ويتم اختياره اختياريًا. باستخدام رمز منطقة مكوّن من حرفَين وفقًا لمعيار ISO 3166-1-alpha-2 (ويسبقه حالة الأحرف الصغيرة r).

ليست الرموز حساسة لحالة الأحرف. البادئة r يستخدم لتمييز جزء المنطقة. لا يمكنك تحديد منطقة بمفرده.

قدّم إصدار Android 7.0 (مستوى واجهة برمجة التطبيقات 24) دعمًا BCP 47 علامات اللغة، التي يمكنك استخدامها لتحديد أهلية والموارد الخاصة بالمنطقة. تتكون علامة اللغة من سلسلة من علامة فرعية واحدة أو أكثر، تعمل كل منها على تحسين أو تضييق نطاق محدّدة بواسطة العلامة الشاملة. لمزيد من المعلومات عن يُرجى الاطّلاع على علامات التعرّف على اللغات.

لاستخدام علامة لغة BCP 47، يمكنك إنشاء تسلسل بين b+ رمز لغة مؤلف من حرفَين وفقًا لمعيار ISO 639-1، ويمكن اتّباعه اختياريًا بعلامات فرعية إضافية مفصولة بعلامة +.

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

للحصول على دليل كامل حول أقلمة تطبيقك للغات الأخرى، راجِع ترجمة تطبيقك.

يمكنك أيضًا الاطّلاع على طريقة getLocales()، التي توفر قائمة محددة من المحلية. تتضمن هذه القائمة اللغة الأساسية.

اتجاه التصميم ldrtl
ldltr

اتجاه تنسيق التطبيق ldrtl تعني "layout-direction-right-to-left". ldltr تعني "layout-direction-left-to-right" وهي القيمة الضمنية الافتراضية.

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

على سبيل المثال، إذا كنت تريد توفير تخطيط معين للغة العربية لأي تخطيط آخر من "اليمين إلى اليسار" مثل الفارسية أو العبرية، يمكنك استخدام أدلة مثل ما يلي:


res/   layout/
    main.xml (التنسيق التلقائي)
  layout-ar/
    main.xml (تنسيق خاص لـ العربية)
  layout-ldrtl/
    main.xml (أي من اليمين إلى اليسار باللغة باستثناء العربية، لأن الحرف "ar" مؤهل اللغة له أولوية أعلى)

ملاحظة: لتفعيل ميزات التنسيق من اليمين إلى اليسار لتطبيقك، يجب ضبط القيمة SupportsRtl على "true" وضبط القيمة TargetSdkVersion على 17 أو أعلى.

تمّت الإضافة في المستوى 17 من واجهة برمجة التطبيقات

أصغر عرض sw<N>dp

أمثلة:
sw320dp
sw600dp
sw720dp
وهكذا.

أقصر بُعد لمساحة الشاشة متاح للتطبيق. وعلى وجه التحديد، يمثّل smallestWidth لنافذة التطبيق الأقصر بين ارتفاع وعرض النافذة المتاحَين يمكنك أيضًا التفكير في الأمر "بأقل عرض ممكن" للنافذة. يمكنك استخدام هذا المؤهِّل بحيث يتوفّر لتطبيقك ما لا يقل عن <N> وحدة بكسل في الثانية للعرض واجهة المستخدم الخاصة بها.

على سبيل المثال، إذا كان التنسيق يتطلب أصغر أبعاد للشاشة أن تكون المساحة أقل من 600 وحدة بكسل مستقلة الكثافة في جميع الأوقات، فيمكنك استخدام هذا المؤهل أنشِئ موارد التنسيق في دليل res/layout-sw600dp/. النظام لا تستخدم هذه الموارد إلا عندما يكون أصغر بُعد للشاشة المتاحة على الأقل 600 وحدة بكسل مستقلة الكثافة، بغض النظر عما إذا كان الجانب الذي لاحظه المستخدم هو 600 وحدة بكسل مستقلة الكثافة أو لا الارتفاع أو العرض. يمكن أن يتغير أصغر عرض إذا تم تغيير حجم النافذة، أو تغيير العرض/الارتفاع المتاح، أو تغيير موضعه، احتمال تغيير الأقسام الداخلية للنظام.

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

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

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

إليك بعض القيم التي يمكنك استخدامها لأحجام الشاشات الشائعة:

  • 320، للأجهزة التي تم ضبط إعدادات الشاشة فيها، مثل:
    • 240×320 ldpi (هاتف QVGA)
    • 320×480 mdpi (هاتف محمول)
    • 480×800 hdpi (هاتف عالي الكثافة)
  • 480، لشاشات مثل 480x800 mdpi (جهاز لوحي/هاتف محمول)
  • 600، لشاشات مثل 600x1024 mdpi (جهاز لوحي مقاس 7 بوصة)
  • 720، لشاشات مثل 720x1280 mdpi (جهاز لوحي مقاس 10 بوصات)

عندما يوفّر تطبيقك أدلة موارد متعددة بقيم مختلفة مؤهِّل smallestWidth، يستخدم النظام المؤهِّل الأقرب إلى (بدون تجاوز) smallestWidth في الجهاز.

تمّت الإضافة في المستوى 13 من واجهة برمجة التطبيقات

يمكنك أيضًا الاطّلاع على android:requiresSmallestWidthDp. التي تشير إلى الحد الأدنى من smallestWidth الذي تطبيقك متوافقًا، smallestScreenWidthDp حقل الضبط، الذي يحتوي على قيمة smallestWidth للجهاز.

لمزيد من المعلومات حول التصميم للشاشات المختلفة باستخدام هذا المؤهل، اطلع على تصميم سريع الاستجابة/التكيفي مع عدد مرات المشاهدة:

عرض وارتفاع متاحان w<N>dp
h<N>dp

أمثلة:
w720dp
w1024dp
h720dp
h1024dp
وهكذا.

تحدِّد هذه السياسة الحد الأدنى المتاح لعرض الشاشة أو ارتفاعها (في dp وحدة محدّدة). حسب القيمة <N>) التي يتم استخدام المورد فيها. هذه تتم مقارنة قيم الإعداد بعرض وارتفاع العرض الحاليَّين للجهاز بين الوضع العمودي والوضع الأفقي، أو طي الجهاز أو طيه، دخول النظام في وضع النوافذ المتعددة أو خروجه منه في وضع النوافذ المتعددة، تعكس القيم عرض النافذة التي تحتوي على التطبيق وارتفاعها، وليس عرض وارتفاع شاشة الجهاز. وبالمثل، بالنسبة للأنشطة المضمنة، ترتبط القيم بالعرض ارتفاع الأنشطة الفردية، وليس عرض الشاشة وارتفاعها. لمزيد من المعلومات راجِع تضمين الأنشطة.

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

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

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

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

ملاحظة: يختار النظام المورد الذي يتطابق مع كليهما في العرض والارتفاع. لذلك، يفضل بشدة استخدام المورد الذي يحدد كليهما على واحدة فقط تحدد أحدهما أو الآخر. على سبيل المثال، إذا كان عرض الشاشة الفعلي 720 بكسل مستقل الكثافة في ارتفاع يبلغ 1280 بكسل مستقل الكثافة ومورد واحد مؤهل باستخدام w720dp وآخر مؤهل w700dp-h1200dp، يتم اختيار الأخير على الرغم من أن الأولى تطابق تمامًا يحددها.

تمّت الإضافة في المستوى 13 من واجهة برمجة التطبيقات

اطّلِع أيضًا على screenWidthDp. وscreenHeightDp إعدادات الضبط، والتي تحتفظ بعرض الشاشة وارتفاعها الحاليَّين.

لمزيد من المعلومات حول التصميم للشاشات المختلفة باستخدام هذا المؤهل، اطلع على تصميم سريع الاستجابة/التكيفي مع عدد مرات المشاهدة:

حجم الشاشة small
normal
large
xlarge
  • small: شاشات ذات حجم مشابه شاشة QVGA منخفضة الكثافة. الحد الأدنى لحجم التصميم لشاشة صغيرة هو 320×426 تقريبًا. وحدات بكسل مستقلة الكثافة. ومن الأمثلة على ذلك QVGA منخفض الكثافة وVGA عالية الكثافة.
  • normal: الشاشات ذات الحجم المشابهة لشاشة HVGA متوسطة الكثافة. الحد الأدنى لحجم التخطيط للشاشة العادية يكون حجمه حوالي 320×470 بكسل مستقل الكثافة. أمثلة على هذه الشاشات هي WQVGA منخفضة الكثافة، وHVGA متوسطة الكثافة، وكثافة عالية WVGA.
  • large: الشاشات ذات حجم مشابه لشاشة VGA متوسطة الكثافة. ويمكن أن يمثل الحد الأدنى لحجم المخطط يكون حجم الشاشة حوالي 480×640 وحدة بكسل مستقلة الكثافة. الأمثلة هي VGA وWVGA متوسط الكثافة. الشاشات.
  • xlarge: شاشات أكبر بكثير من شاشة HVGA تقليدية متوسطة الكثافة. الحد الأدنى لحجم التخطيط لشاشة كبيرة جدًا هو بحجم 720×960 بكسل مستقل الكثافة تقريبًا. وفي معظم الحالات، تكون الأجهزة ذات الشاشات الكبيرة جدًا كبيرة جدًا بحيث لا يمكن حملها في جيبك، ومن المرجح أن تكون أجهزة بنمط الجهاز اللوحي. تمت الإضافة في المستوى 9 من واجهة برمجة التطبيقات:

ملاحظة: استخدام مؤهِّل الحجم لا تشير إلى أنّ الموارد متوفّرة فقط للشاشات بهذا الحجم. إذا لم توفير موارد بديلة تتضمّن مؤهِّلات تتطابق بشكل أفضل مع الجهاز الحالي يمكن أن يستخدم النظام أيٍ من الموارد الأفضل مطابقة.

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

تمّت إضافتها في المستوى 4 من واجهة برمجة التطبيقات

اطّلِع أيضًا على screenLayout. حقل التهيئة، الذي يشير إلى ما إذا كانت الشاشة صغيرة أو عادية أو كبيرة.

لمزيد من المعلومات، يُرجى الانتقال إلى الشاشة نظرة عامة على التوافق.

جانب الشاشة long
notlong
  • long: الشاشات الطويلة، مثل WQVGA وWVGA وFWVGA
  • notlong: ليست شاشات طويلة، مثل QVGA وHVGA وVGA

تمّت إضافتها في المستوى 4 من واجهة برمجة التطبيقات

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

اطّلِع أيضًا على حقل إعداد screenLayout. والتي تشير إلى ما إذا كانت الشاشة طويلة.

شاشة مستديرة round
notround
  • round: شاشات مستديرة، مثل جهاز مستدير قابل للارتداء
  • notround: شاشات مستطيلة، مثل الهواتف أو الأجهزة اللوحية

تمّت الإضافة في المستوى 23 من واجهة برمجة التطبيقات

الاطّلاع أيضًا على إعدادات isScreenRound() التي تشير إلى ما إذا كانت الشاشة مستديرة.

مجموعة ألوان واسعة widecg
nowidecg
  • widecg: يعرض مجموعة ألوان واسعة مثل Display P3 أو AdobeRGB
  • nowidecg: يعرض مجموعة ألوان ضيقة مثل sRGB

تمّت الإضافة في المستوى 26 من واجهة برمجة التطبيقات

الاطّلاع أيضًا على إعدادات isScreenWideColorGamut() والذي يشير إلى ما إذا كانت الشاشة تحتوي على مجموعة ألوان واسعة.

نطاق عالي الديناميكية (HDR) highdr
lowdr
  • highdr: شاشات ذات نطاق عالي الديناميكية
  • lowdr: شاشات العرض بنطاق ديناميكي منخفض/عادي

تمّت الإضافة في المستوى 26 من واجهة برمجة التطبيقات

الاطّلاع أيضًا على إعدادات isScreenHdr() التي تشير إلى ما إذا كانت الشاشة تتضمن إمكانيات النطاق العالي الديناميكية.

اتجاه الشاشة port
land
  • port: الجهاز في الاتجاه العمودي (عمودي)
  • land: الجهاز في الاتجاه الأفقي (أفقي)

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

اطّلِع أيضًا على حقل إعداد orientation. والذي يشير إلى الاتجاه الحالي للجهاز.

وضع واجهة المستخدم car
desk
television
appliance
watch
vrheadset
  • car: يتم عرض الجهاز في قاعدة إرساء السيارة
  • desk: يتم عرض الجهاز في قاعدة إرساء مكتبية
  • television: يتم عرض الجهاز على تلفزيون مما يوفر "عشرة أقدام" المستخدم من خلال وضع واجهة المستخدم على شاشة كبيرة المستخدم بعيدًا عنه، وتتمحور التجربة بشكل أساسي حول لوحة التحكّم أو غيرها تفاعل بدون مؤشر
  • appliance: الجهاز يعمل كجهاز، مع عدم عرض الشاشة
  • watch: الجهاز مزوّد بشاشة ويتم ارتداؤه في المعصم
  • vrheadset: يجري عرض الجهاز في الواقع الافتراضي. سماعة رأس

تمّت الإضافة في المستوى 8 من واجهة برمجة التطبيقات التلفزيون الذي تمت إضافته في واجهة برمجة التطبيقات 13؛ تمت إضافتها في واجهة برمجة التطبيقات 20

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

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

الوضع الليلي night
notnight
  • night: وقت ليلي
  • notnight: نهارًا

تمّت إضافتها في المستوى 8 من واجهة برمجة التطبيقات

يمكن أن يتغيّر هذا الوضع خلال فترة عمل تطبيقك في حال ترك "الوضع الليلي" مفعّلاً. الوضع التلقائي (الافتراضي)، وفي هذه الحالة يتغير الوضع بناءً على الوقت من اليوم. يمكنك تفعيل أو إيقاف هذا الوضع باستخدام UiModeManager. للحصول على معلومات عن مدى تأثير ذلك في تطبيقك أثناء وقت التشغيل، يُرجى الاطّلاع على التعامل مع تغييرات الإعدادات:

كثافة وحدات بكسل الشاشة (نقطة لكل بوصة) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
nnndpi
  • ldpi: شاشات منخفضة الكثافة حوالي 120 نقطة لكل بوصة.
  • mdpi: شاشات متوسطة الكثافة (على شاشات HVGA التقليدية) تَقْرِيبًا 160 نقطة لكل بوصة
  • hdpi: شاشات عالية الكثافة حوالي 240 نقطة لكل بوصة.
  • xhdpi: شاشات عالية الكثافة حوالي 320 نقطة لكل بوصة. تمت الإضافة في واجهة برمجة التطبيقات المستوى 8
  • xxhdpi: شاشات عالية الكثافة حوالي 480 نقطة لكل بوصة. تمت الإضافة في واجهة برمجة التطبيقات المستوى 16
  • xxxhdpi: استخدامات الكثافة الفائقة للغاية (رمز مشغّل التطبيقات فقط—راجع دعم كثافات وحدات بكسل مختلفة) حوالي 640 نقطة لكل بوصة. تمّت إضافتها في المستوى 18 من واجهة برمجة التطبيقات
  • nodpi: يتم استخدامه لموارد الصور النقطية التي لا تريد تحجيمها لتتناسب مع كثافة الجهاز.
  • tvdpi: شاشات في مكان ما بين mdpi وhdpi؛ حوالي 213 نقطة لكل بوصة. لا يُعتبر هذا الإجراء "أساسيًا" مجموعة الكثافة. وهو مخصص في الغالب لأجهزة التلفزيون بدقة 720p لا تحتاجه معظم التطبيقات. مع لوحات التلفزيون بدقة 1080p، استخدِم xhdpi. أمّا لوحات التلفزيون بدقة 4K، فاستخدِم xxxhdpi تمّت الإضافة في المستوى 13 من واجهة برمجة التطبيقات
  • anydpi: يتطابق مع جميع كثافات الشاشة وله الأولوية على مؤهلات أخرى. هذا مفيد ملفات المتجهات القابلة للرسم. تمّت الإضافة في المستوى 21 من واجهة برمجة التطبيقات
  • nnndpi: تُستخدَم لتمثيل كثافات غير عادية، حيث nnn هي كثافة شاشة لعدد صحيح موجب. هذا النمط لا يتم استخدامها في معظم الحالات. يقلل استخدام مجموعات الكثافة القياسية بشكل كبير النفقات العامة لدعم كثافات شاشات الأجهزة المختلفة في السوق.

توجد نسبة تحجيم 3:4:6:8:12:16 بين الكثافات الست الأساسية (مع تجاهل كثافة tvdpi). إذًا، تكون الصورة النقطية 9x9 في ldpi 12x12 في mdpi و18x18 in hdpi و24x24 في xhdpi، وهكذا.

ملاحظة: لا يعني استخدام مؤهِّل الكثافة أنّ تكون الموارد فقط للشاشات ذات الكثافة. في حال عدم تقديم معلومات بديلة الموارد ذات المؤهلات التي تتطابق بشكل أفضل مع تهيئة الجهاز الحالية، يستخدم النظام الموارد التي تمثّل أفضل مطابقة.

لمزيد من المعلومات حول كيفية التعامل مع كثافات الشاشة المختلفة وطريقة استخدام Android إمكانية تغيير حجم الصور النقطية لتناسب الكثافة الحالية، يمكنك معرفة نظرة عامة على توافق الشاشة

نوع الشاشة التي تعمل باللمس notouch
finger
  • notouch: لا يحتوي الجهاز على شاشة تعمل باللمس.
  • finger: يحتوي الجهاز على شاشة تعمل باللمس مخصصة للأغراض التالية: تُستخدم من خلال تفاعل اتجاه إصبع المستخدم.

اطّلِع أيضًا على حقل إعداد touchscreen. التي تشير إلى نوع الشاشة التي تعمل باللمس على الجهاز.

توفُّر لوحة المفاتيح keysexposed
keyshidden
keyssoft
  • keysexposed: تتوفّر لوحة مفاتيح في الجهاز. إذا كان الجهاز يحتوي على تفعيل لوحة مفاتيح البرنامج (على الأرجح)، إذ تُستخدم هذه اللوحة حتى عندما تكون لوحة مفاتيح الجهاز لا يتم الكشف عنه للمستخدم أو عندما لا يحتوي الجهاز على لوحة مفاتيح خارجية. في حال عدم وجود برامج يتم توفير لوحة المفاتيح أو إيقافها، ثم لا يتم استخدامها إلا عندما يتم استخدام لوحة مفاتيح خارجية مكشوفة.
  • keyshidden: يتضمن الجهاز لوحة مفاتيح خارجية ولكنها متاحة مخفية و الجهاز لا يكون فيه لوحة مفاتيح برمجية مُفعَّلة.
  • keyssoft: تم تفعيل لوحة مفاتيح برمجية في الجهاز، سواء كانت مرئية أم لا.

في حال تقديم keysexposed موارد ولكن ليس keyssoft يستخدم النظام موارد keysexposed بغض النظر عن لوحة المفاتيح مرئية طالما أنّ النظام يحتوي على لوحة مفاتيح برمجية مفعّلة.

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

يمكنك أيضًا الاطّلاع على حقلَي الإعداد hardKeyboardHidden وkeyboardHidden اللذين يشيران إلى إمكانية رؤية جهاز. لوحة المفاتيح ومستوى رؤية أي نوع من لوحات المفاتيح (بما في ذلك البرامج)، على التوالي.

أسلوب إدخال النص الأساسي nokeys
qwerty
12key
  • nokeys: لا يحتوي الجهاز على مفاتيح خارجية لإدخال النص.
  • qwerty: يحتوي الجهاز على لوحة مفاتيح QWERTY، سواء كانت مرئية للمستخدم مستخدم أم لا.
  • 12key: يحتوي الجهاز على لوحة مفاتيح مكوّنة من 12 مفتاحًا، سواء كانت مرئية للمستخدم أم لا.

اطّلِع أيضًا على حقل إعداد keyboard. والذي يشير إلى أسلوب إدخال النص الأساسي المتاح.

إصدار النظام الأساسي (مستوى واجهة برمجة التطبيقات) أمثلة:
v3
v4
v7
وهكذا.

مستوى واجهة برمجة التطبيقات المتوافق مع الجهاز على سبيل المثال، v1 لمستوى واجهة برمجة التطبيقات 1 (أجهزة Android التي تعمل بالإصدار 1.0 أو إصدار أحدث) وv4 للمستوى 4 من واجهة برمجة التطبيقات (أجهزة Android التي تعمل بنظام التشغيل Android) 1.6 أو أعلى). لمزيد من المعلومات حول هذه القيم، اطلع على مستند مستويات واجهة برمجة تطبيقات Android.

ملاحظة: لا تتوافق بعض إصدارات Android مع جميع المؤهلات. استخدام مؤهِّل جديد ضمنيًا مؤهِّل إصدار النظام الأساسي بحيث يمكن للأجهزة القديمة تجاهله. على سبيل المثال، استخدام يتضمّن مؤهِّل w600dp تلقائيًا مؤهِّل v13، لأنّه كان مؤهِّل العرض متاح جديدًا في المستوى 13 من واجهة برمجة التطبيقات. لتجنب أي مشكلات، قم دائمًا بتضمين مجموعة من الموارد التلقائية (مجموعة من الموارد بدون مؤهلات). لمزيد من المعلومات، يُرجى الاطّلاع على قسم حول توفير أفضل توافق للأجهزة مع الموارد

قواعد اسم المؤهِّل

في ما يلي بعض القواعد حول استخدام أسماء مؤهلات الضبط:

  • يمكنك تحديد مؤهلات متعددة لمجموعة واحدة من الموارد، مفصولة بشرطة. بالنسبة مثال، ينطبق drawable-en-rUS-land على الأجهزة باللغة الإنجليزية الأمريكية في الوضع الأفقي. توجهك.
  • يجب أن تكون المؤهِّلات بالترتيب المذكور في الجدول 2.
    • خطأ: drawable-hdpi-port/
    • صحيح: drawable-port-hdpi/
  • لا يمكن دمج أدلة الموارد البديلة. على سبيل المثال، لا يمكنك الحصول على res/drawable/drawable-en/
  • والقيم غير حساسة لحالة الأحرف. يحوِّل برنامج تجميع الموارد أسماء الأدلة إلى الأحرف اللاتينية الصغيرة قبل المعالجة لتجنب المشكلات بشأن الحساسية لحالة الأحرف وأنظمة الملفات. إنّ الكتابة بالأحرف اللاتينية الكبيرة في الأسماء تهدف فقط إلى الاستفادة من سهولة القراءة.
  • يُسمح بقيمة واحدة فقط لكل نوع مؤهِّل. على سبيل المثال، إذا كنت تريد استخدام الملفات نفسها القابلة للرسم لإسبانيا وفرنسا، لا يمكنك الحصول على دليل باسم drawable-es-fr/ بدلاً من ذلك، تحتاج إلى دليلين للموارد، مثل drawable-es/ وdrawable-fr/، اللذان يحتويان على الملفات المناسبة ومع ذلك، لست مطالبًا بتكرار الملفات في كلا الموقعين. بدلاً من ذلك، إنشاء اسم مستعار لمورد، كما هو موضح في قسم إنشاء قسم الموارد البديلة.

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

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

إنشاء مراجع للأسماء المستعارة

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

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

على سبيل المثال، تخيل أن لديك رمز التطبيق icon.png، وتحتاج إلى إصدار فريد من لمختلف اللغات. ومع ذلك، هناك لغتان هما الإنجليزية الكندية والفرنسية الكندية والإنجليزية الكندية، تستخدم نفس الإصدار. ليس عليك نسخ الصورة نفسها. في دليل الموارد لكل من الإنجليزية الكندية والفرنسية الكندية. بدلاً من ذلك، يمكنك حفظ الصورة المستخدمة في كليهما باستخدام أي اسم بخلاف icon.png، مثل icon_ca.png، ووضع في دليل res/drawable/ التلقائي. أنشئ بعد ذلك ملف icon.xml في res/drawable-en-rCA/ وres/drawable-fr-rCA/ يشير إلى icon_ca.png. المورد باستخدام العنصر <bitmap>. وهذا يتيح لك تخزين نسخة واحدة فقط من ملف PNG وملفَّي XML صغيرين يشيران إليه. يمكنك الاطّلاع على الأمثلة في الأقسام التالية. لمزيد من التفاصيل.

قابلة للرسم

لإنشاء اسم مستعار لعنصر حالي قابل للرسم، استخدِم العنصر <drawable>:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="icon">@drawable/icon_ca</drawable>
</resources>

إذا حفظت هذا الملف باسم "icon.xml" كبديل دليل الموارد، مثل res/values-en-rCA/، فسيتم تجميعه إلى مورد يمكنك الرجوع إليه باسم R.drawable.icon، ولكنه وهو في الواقع اسم مستعار لمورد R.drawable.icon_ca، وهو تم الحفظ في res/drawable/.

التنسيق

لإنشاء عنوان بديل لتنسيق حالي، استخدِم <include>. عنصر ملفوف في <merge>:

<?xml version="1.0" encoding="utf-8"?>
<merge>
    <include layout="@layout/main_ltr"/>
</merge>

إذا حفظت هذا الملف باسم main.xml، فسيتم تجميعه في مورد يمكنك الرجوع إليه كـ R.layout.main، ولكنه في الواقع اسم مستعار للنطاق R.layout.main_ltr المصدر.

السلاسل والقيم البسيطة الأخرى

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

<?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، وlayout. لمزيد من المعلومات حول الأنواع المختلفة، يُرجى الاطّلاع على نظرة عامة على أنواع الموارد.
  • اسم المورد، وهو إمّا اسم الملف باستثناء الإضافة أو القيمة في سمة XML android:name، إذا كانت هو قيمة بسيطة مثل السلسلة.

هناك طريقتان يمكنك من خلالهما الوصول إلى مورد:

  • في الرمز البرمجي: باستخدام عدد صحيح ثابت من فئة فرعية من R الفئة، مثل:
    R.string.hello

    string هو نوع المورد وhello هو اسم المورد. هناك العديد من واجهات برمجة تطبيقات Android التي يمكنها الوصول إلى مواردك عند توفير رقم تعريف مورد بهذا التنسيق. لمزيد من المعلومات، يُرجى الاطّلاع على القسم الوصول إلى الموارد في الرمز.

  • في XML: استخدام بنية XML خاصة تتوافق مع معرِّف المورد المحدّد في فئة R، مثل:
    @string/hello

    string هو نوع المورد وhello هو اسم المورد. يمكنك استخدام هذه الصفحة في أي مورد XML، أي مكان يُتوقع أن تقدمه في أحد الموارد. لمزيد من المعلومات، راجع القسم الوصول إلى الموارد من تنسيق XML.

الوصول إلى الموارد في الرموز البرمجية

يمكنك استخدام مورد في الرمز البرمجي من خلال تمرير رقم تعريف المورد كمَعلمة طريقة. بالنسبة على سبيل المثال، يمكنك ضبط ImageView لاستخدام res/drawable/myimage.png مورد باستخدام setImageResource():

Kotlin

val imageView = findViewById(R.id.myimageview) as ImageView
imageView.setImageResource(R.drawable.myimage)

Java

ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

يمكنك أيضًا استرداد موارد فردية باستخدام طرق في Resources، والتي يمكنك الحصول على مثال لها. مع getResources().

بناء الجملة

فيما يلي بناء الجملة للإشارة إلى مورد في التعليمة البرمجية:

[<package_name>.]R.<resource_type>.<resource_name>
  • يشير <package_name> إلى اسم الحزمة التي يتوفّر فيها المورد (وليس مطلوبة عند الإشارة إلى الموارد من حزمتك الخاصة).
  • <resource_type> هي الفئة الفرعية R لنوع المورد.
  • <resource_name> هو اسم ملف المورد بدون الامتداد أو قيمة السمة android:name في عنصر XML، وقيم بسيطة.

بالنسبة مزيد من المعلومات حول كل نوع من أنواع الموارد وكيفية الإشارة إليها، راجِع نظرة عامة على أنواع الموارد.

حالات الاستخدام

هناك العديد من الطرق التي تقبل معلَمة رقم تعريف المورد، ويمكنك استرداد الموارد باستخدام في Resources. إِنْتَ يمكننا الحصول على مثيل لـ Resources باستخدام Context.getResources().

إليك بعض الأمثلة على الوصول إلى الموارد في التعليمات البرمجية:

Kotlin

// Load a background for the current screen from a drawable resource.
window.setBackgroundDrawableResource(R.drawable.my_background_image)

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
window.setTitle(resources.getText(R.string.main_title))

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen)

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in))

// Set the text on a TextView object using a resource ID.
val msgTextView = findViewById(R.id.msg) as TextView
msgTextView.setText(R.string.hello_message)

Java

// Load a background for the current screen from a drawable resource.
getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

// Set the Activity title by getting a string from the Resources object, because
//  this method requires a CharSequence rather than a resource ID.
getWindow().setTitle(getResources().getText(R.string.main_title));

// Load a custom layout for the current screen.
setContentView(R.layout.main_screen);

// Set a slide in animation by getting an Animation from the Resources object.
flipper.setInAnimation(AnimationUtils.loadAnimation(this,
        R.anim.hyperspace_in));

// Set the text on a TextView object using a resource ID.
TextView msgTextView = (TextView) findViewById(R.id.msg);
msgTextView.setText(R.string.hello_message);

تنبيه: لا تعدِّل ملف R.java يدويًا. يتم إنشاؤه باستخدام أداة aapt عندما يكون مشروعك مجمعة. يتم إلغاء أي تغييرات في المرة التالية التي تقوم فيها بالتجميع.

الوصول إلى الموارد من تنسيق XML

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

على سبيل المثال، إذا أضفت Button إلى التنسيق، استخدِم مورد سلسلة لنص الزر:

<Button
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="@string/submit" />

بناء الجملة

فيما يلي بناء الجملة للإشارة إلى مورد في مورد XML:

@[<package_name>:]<resource_type>/<resource_name>
  • <package_name> هو اسم الحزمة التي يوجد فيها المورد (وليس مطلوب عند الإشارة إلى الموارد من نفس الحزمة).
  • <resource_type> هو الفئة الفرعية R لنوع المورد.
  • <resource_name> إما اسم ملف المورد بدون الامتداد أو قيمة السمة android:name في عنصر XML، وقيم بسيطة.

بالنسبة مزيد من المعلومات حول كل نوع من أنواع الموارد وكيفية الإشارة إليها، راجِع نظرة عامة على أنواع الموارد.

حالات الاستخدام

وفي بعض الحالات، عليك استخدام مورد لقيمة في XML، مثلاً لتطبيق صورة قابلة للرسم. بأداة، كما يمكنك أيضًا استخدام مورد في XML في أي مكان يقبل قيمة بسيطة. بالنسبة مثلاً، إذا كان لديك ملف الموارد التالي الذي يشتمل على مورد ألوان ومورد سلسلة:

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <color name="opaque_red">#f00</color>
   <string name="hello">Hello!</string>
</resources>

يمكنك استخدام هذه الموارد في ملف التخطيط التالي لتعيين لون النص السلسلة النصية:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@color/opaque_red"
    android:text="@string/hello" />

وفي هذه الحالة، لا تحتاج إلى تحديد اسم الحزمة في مرجع المورد، لأنّ الموارد من حزمتك الخاصة. إلى مرجع نظام، عليك تضمين اسم الحزمة، كما هو موضح في المثال التالي:

<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:textColor="@android:color/secondary_text_dark"
    android:text="@string/hello" />

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

ويمكنك أيضًا استخدام الموارد بتنسيق XML لإنشاء أسماء مستعارة. على سبيل المثال، يمكنك إنشاء مورد قابل للرسم يكون اسمًا مستعارًا لمورد آخر قابل للرسم:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/other_drawable" />

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

سمات نمط المرجع

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

للإشارة إلى سمة نمط، فإن بنية الاسم تتطابق تقريبًا مع المورد العادي ولكن بدلاً من كتابة "at" (@)، فاستخدم علامة استفهام (?). تشير رسالة الأشكال البيانية جزء نوع المورد اختياري. بالتالي، تكون بنية المرجع على النحو التالي:

?[<package_name>:][<resource_type>/]<resource_name>

على سبيل المثال، إليك كيفية الإشارة إلى سمة لضبط لون النص ليتطابق مع لون النص الثانوي لمظهر النظام:

<EditText id="text"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:textColor="?android:textColorSecondary"
    android:text="@string/hello_world" />

تحدّد السمة android:textColor هنا اسم سمة النمط في الموضوع الحالي. يستخدم Android الآن القيمة المطبَّقة على android:textColorSecondary. نمط كقيمة لـ android:textColor في هذا التطبيق المصغَّر. نظرًا لأن النظام أداة الموارد المختلفة من المتوقع أن يكون هناك مورد سمة متوقع في هذا السياق، لا تحتاج إلى أن تذكر النوع بشكل صريح، وهو ?android:attr/textColorSecondary يمكنك استبعاد النوع attr.

الوصول إلى الملفات الأصلية

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

لا يتم تحديد مورد للملفات المحفوظة في الدليل assets/. بالتالي، لا يمكنك الإشارة إليها من خلال الفئة R أو من مصادر XML. بدلاً من ذلك، يمكنك البحث عن الملفات في دليل assets/ مثل نظام الملفات العادي وقراءة البيانات الأولية باستخدام AssetManager

مع ذلك، إذا كان كل ما تريده هو قراءة البيانات الأولية (مثل ملف فيديو أو ملف صوتي)، ثم احفظ الملف في دليل res/raw/ واقرأ سلسلة وحدات البايت باستخدام openRawResource().

الوصول إلى موارد النظام الأساسي

يحتوي Android على عدد من الموارد العادية، مثل الأنماط والمظاهر والتنسيقات. إلى والوصول إلى هذه الموارد، فقم بتأهيل مرجع مواردك اسم الحزمة "android". على سبيل المثال، يوفّر Android مورد تنسيق يمكنك استخدامه من أجل عناصر قائمة في ListAdapter:

Kotlin

listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)

Java

setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

في هذا المثال، simple_list_item_1 هو مورد تنسيق يتم تحديده من خلال السمة منصة للعناصر في ListView. يمكنك استخدام هذا بدلاً من إنشاء التخطيط الخاص بك لعناصر القائمة.

توفير أفضل توافق للأجهزة مع الموارد

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

على سبيل المثال، إذا كان تطبيقك يتيح استخدام عدة لغات، احرِص دائمًا على تضمين دليل values/ (يتم حفظ سلاسلك فيه) بدون مؤهِّل اللغة والمنطقة. إذا وضعت بدلاً من ذلك جميع ملفات السلسلة في الأدلة التي تحتوي على مؤهِّل لغة ومنطقة، فسيتعطّل التطبيق عند تشغيله على جهاز تم ضبطه على لغة لا تتيحها سلاسلك.

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

وبالمثل، إذا قدمت موارد تخطيط مختلفة استنادًا إلى اتجاه الشاشة، اختَر اتجاهًا واحدًا ليكون الاتجاه التلقائي. على سبيل المثال، بدلاً من توفير موارد التنسيق layout-land/ للوضع الأفقي وlayout-port/ للوضع العمودي، اترك واحدة كإعداد تلقائي، مثل layout/ للصورة الأفقية وlayout-port/ للوضع العمودي.

يعد توفير موارد افتراضية أمرًا مهمًا، ليس فقط لأنه قد يتم تشغيل تطبيقك على لم تكن تتوقعه، ولكن أيضًا لأن الإصدارات الجديدة من 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-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/

ولنفترض أن ما يلي هو إعداد الجهاز:

اللغة = en-GB
اتجاه الشاشة = port
كثافة وحدات بكسل الشاشة = hdpi
نوع الشاشة التي تعمل باللمس = notouch
أسلوب إدخال النص الأساسي = 12key

من خلال مقارنة إعدادات الجهاز بالموارد البديلة المتاحة، يختار Android عناصر قابلة للرسم من drawable-en-port.

يصل النظام إلى قراره بشأن الموارد التي سيتم استخدامها مع ما يلي: المنطق:

الشكل 2. مخطط انسيابي يوضح كيفية عثور Android على أفضل مطابقة.

  1. يمكنك إزالة ملفات الموارد التي تتعارض مع إعداد الجهاز.

    تم حذف الدليل drawable-fr-rCA/ لأنه تتعارض مع لغة en-GB.

    drawable/
    drawable-en/
    drawable-fr-rCA/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    استثناء: تشير كثافة وحدات بكسل الشاشة إلى المؤهِّل الوحيد الذي لا إزالتها بسبب التناقض. وعلى الرغم من أن كثافة شاشة الجهاز هي hdpi، لا يتم إزالة drawable-port-ldpi/ لأنّ كل كثافة للشاشة هي تُعد مطابقة في هذه المرحلة. للحصول على معلومات، يُرجى الاطّلاع على نظرة عامة على توافق الشاشة.

  2. ابحث عن المؤهِّل ذي الأولوية الأعلى في القائمة (الجدول 2). (ابدأ بـ "مركز عملائي").
  3. هل يتضمن أي من أدلة الموارد هذا المؤهل؟
    • إذا كانت الإجابة "لا"، عد إلى الخطوة 2 وانظر إلى المؤهل التالي. في هذا المثال، الإجابة هي "لا" إلى أن يتم الوصول إلى مؤهل اللغة.
    • إذا كانت الإجابة بنعم، انتقِل إلى الخطوة الرابعة.
  4. يمكنك إزالة أدلة الموارد التي لا تتضمن هذا المؤهِّل. في هذا المثال، النظام بعد ذلك، يؤدي ذلك إلى إزالة جميع الأدلة التي لا تتضمن مؤهل لغة:
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

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

  5. كرِّر الخطوات الثانية والثالثة والرابعة حتى يبقى دليل واحد فقط. في هذا المثال، الشاشة هو المؤهِّل التالي الذي توجد له أي مطابقات. ولذلك، يتم استبعاد الموارد التي لا تحدِّد اتجاه الشاشة:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    

    الدليل المتبقي هو drawable-en-port.

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

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

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

ملاحظة: تكون أولوية المؤهِّل (في الجدول 2) أكثر أهمية. عن عدد المؤهلات التي تتطابق تمامًا مع الجهاز. في المثال السابق، في الخطوة الرابعة يتضمن الخيار الأخير في القائمة ثلاثة مؤهلات تتطابق تمامًا مع الجهاز (الاتجاه ونوع الشاشة التي تعمل باللمس وطريقة الإدخال)، في حين أن drawable-en يحتوي على معلَمة واحدة فقط تتطابق مع (اللغة). ومع ذلك، فإن اللغة لها أولوية أعلى من هذه المؤهلات الأخرى، لذا تم استبعاد drawable-port-notouch-12key.