وذكر فإن الذكرى تنفع المؤمنين

     .. سبحان الله وبحمده في يوم مائة مرة حطت خطاياه وإن كانت مثل زبد البحر". **** وعن أبي هريرة و أبي سعيد رضي الله عنهما، عن النبي صلى الله عليه وسلم، قال: «إن الله اصطفى من الكلام أربعا: سبحان الله، والحمد لله، ولا إله إلا الله، والله أكبر *** قال رسول الله صلى الله عليه وسلم: «بخ بخ لخمس ما أثقلَهن في الميزان: لا إله إلا الله، وسبحان الله، والحمد لله، والله أكبر، والولد الصالح يُتوفَّى للمرء المسلم فيحتسبه ***

ad

الأربعاء

موارد التطبيق App Resources -1

موارد التطبيق  App Resources





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


مقالات المدونة
أدوات جديدة لإدارة أحجام الشاشة
الروبوت 3.2 يتضمن أدوات جديدة لدعم الأجهزة مع مجموعة واسعة من أحجام الشاشة. أحد النتائج المهمة هو دعم أفضل لحجم جديد من الشاشة. ما يسمى عادة قرص "7 بوصة". يقدم هذا الإصدار أيضا العديد من واجهات برمجة التطبيقات الجديدة لتبسيط عمل المطورين في التكيف مع أحجام الشاشة المختلفة.

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

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

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

تصميم لشاشات متعددة
توضح لك هذه الفئة كيفية تنفيذ واجهة مستخدم محسنة لعدة تكوينات للشاشة.


نظرة عامة على الموارد



المواضيع
توفير الموارد
الوصول إلى الموارد
التعامل مع تغييرات وقت التشغيل
الموقع
موارد شمل المعقدة
مرجع
أنواع الموارد



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


الشكل 1. جهازين مختلفين، كل باستخدام التخطيط الافتراضي (التطبيق لا يوفر تخطيطات بديلة).


الشكل 2. جهازين مختلفين، كل باستخدام تخطيط مختلف المقدمة لأحجام الشاشة المختلفة.



بالنسبة إلى أي نوع من الموارد، يمكنك تحديد موارد بديلة ومبدئية متعددة للتطبيق:

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

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

توفر المستندات التالية دليلا كاملا لكيفية تنظيم موارد التطبيق، وتحديد موارد بديلة، والدخول إليها في تطبيقك، والمزيد:

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


توفير الموارد



نظرة سريعة

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

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

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

 مشروعي/
     SRC /
          MyActivity.java
     RES /
         drawable /
              graphic.png
         نسق/
              main.xml
              info.xml
         مظهر سطحي نقطي /
              icon.png
         القيم/
              strings.xml
كما ترون في هذا المثال، يحتوي res/ الدليل على كافة الموارد (في الدلائل الفرعية): مورد صورة، وموارد تخطيط، mipmap/ الدلائل لرموز قاذفة، وملف مورد سلسلة. وتعد أسماء دليل الموارد مهمة ويرد وصفها في الجدول 1.

ملاحظة: لمزيد من المعلومات حول استخدام مجلدات ميماب، راجع إدارة نظرة عامة على المشاريع .

الجدول 1. أدلة الموارد المدعومة داخل مشروع res/ الدليل.
دليل نوع المورد
animator/ ملفات شمل التي تحدد الرسوم المتحركة الملكية .
anim/ ملفات شمل التي تحدد الرسوم المتحركة توين . (يمكن أيضا أن يتم حفظ الرسوم المتحركة الملكية في هذا الدليل، ولكن هو المفضل للرسوم animator/ الدليل للممتلكات الرسوم المتحركة للتمييز بين هذين النوعين.)
color/ ملفات شمل التي تحدد قائمة حالة الألوان. راجع مورد قائمة ولاية اللون
drawable/
ملفات نقطية ( .png أو .9.png أو .jpg أو .gif ) أو ملفات شمل التي تم تجميعها في الأنواع الفرعية للموارد .9.png التالية:

ملفات نقطية
تسع بقع (صور نقطية رائعة)
قوائم الدولة
الأشكال
الرسوم المتحركة دراوابلز
دريابلز أخرى
انظر الموارد التي يمكن رسمها .
mipmap/ ملفات دراوابل لكثافة رمز قاذفة مختلفة. لمزيد من المعلومات حول إدارة رموز قاذفة مع mipmap/ المجلدات، انظر إدارة نظرة عامة على المشاريع .
layout/ ملفات شمل التي تحدد تخطيط واجهة المستخدم. راجع موارد التنسيق .
menu/ ملفات شمل التي تحدد قوائم التطبيقات، مثل قائمة الخيارات أو قائمة السياق أو القائمة الفرعية. راجع قائمة الموارد .
raw/
ملفات تعسفية لحفظها في شكلها الخام. لفتح هذه الموارد مع InputStream الخام، استدعاء Resources.openRawResource() مع معرف المورد، وهو R.raw. filename R.raw. filename .

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

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

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

arrays.xml لمصفوفات الموارد ( المصفوفات المكتوبة ).
colors.xml لقيم اللون
dimens.xml لقيم الأبعاد .
strings.xml لقيم السلسلة .
styles.xml للأنماط .
راجع موارد السلسلة والموارد النمط وأنواع المزيد من الموارد .
xml/ ملفات شمل التعسفية التي يمكن قراءتها في وقت التشغيل عن طريق استدعاء Resources.getXML() . يجب حفظ ملفات تكوين شمل مختلفة هنا، مثل تكوين قابل للبحث .
font/ ملفات الخط مع ملحقات مثل .ttf أو .otf أو .ttc أو ملفات شمل التي تتضمن عنصر <font-family> . لمزيد من المعلومات حول الخطوط كموارد، انتقل إلى الخطوط في شمل .
تحذير: لا تقم بحفظ ملفات الموارد مباشرة داخل res/ ديركتوري - سيؤدي ذلك إلى حدوث خطأ في برنامج التحويل البرمجي.

لمزيد من المعلومات حول أنواع معينة من الموارد، راجع وثائق أنواع الموارد .

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

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

الشكل 1. جهازين مختلفين، كل باستخدام موارد تخطيط مختلفة.





الشكل 1. جهازين مختلفين، كل باستخدام موارد تخطيط مختلفة.

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

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

إنشاء دليل جديد في res/ اسمه في النموذج <resources_name> - <config_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 صورة هي نفسها دائما، ولكن الروبوت بتحديد إصدار كل مورد الذي يطابق أفضل الجهاز الحالي، من خلال مقارنة معلومات تكوين الجهاز مع المؤهلات في اسم دليل المورد.

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

جدول 2. أسماء تصفيات التكوين.
ترتيب قيم المؤهلين وصف
مسك و منك أمثلة:
mcc310
mcc310-mnc004
mcc208-mnc00
إلخ
رمز البلد الجوال (مسك)، متبوعا اختياريا بشفرة شبكة الجوال (منك) من بطاقة سيم في الجهاز. على سبيل المثال، mcc310 هو الولايات المتحدة على أي الناقل، mcc310-mnc004 الولايات المتحدة على فيريزون، mcc208-mnc00 هو فرنسا على أورانج.

إذا كان الجهاز يستخدم اتصال لاسلكي (هاتف غسم)، فإن قيم مسك و منك تأتي من بطاقة سيم.

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

انظر أيضا حقول التكوين mcc ، و mnc ، والتي تشير إلى رمز البلد المحمول الحالي ورمز شبكة الجوال، على التوالي.
اللغة والمنطقة أمثلة:
en
fr
en-rUS
fr-rFR
fr-rCA
إلخ
يتم تعريف اللغة بواسطة رمز لغة إسو 639-1 مؤلف من حرفين، يليه اختياريا رمز منطقة إسو 3166-1-ألفا-2 حرفين ( يسبقهما حرفان صغيران " r ").

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

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

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

راجع أيضا حقل تهيئة locale ، الذي يشير إلى اللغة الحالية.
اتجاه التخطيط ldrtl
ldltr
اتجاه تخطيط التطبيق الخاص بك. ldrtl يعني "تخطيط الاتجاه من اليمين إلى اليسار". ldltr يعني "تخطيط الاتجاه من اليسار إلى اليمين" وهي القيمة الضمنية الافتراضية.

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

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

 RES /
     نسق/
          main.xml (التخطيط الافتراضي)
     تخطيط ع /
          main.xml (تخطيط محدد للغة العربية)
     تخطيط ldrtl /
          main.xml (أي لغة "من اليمين إلى اليسار"، باستثناء
                   للغة العربية، لأن "أر" تصفيات اللغة
                   له أسبقية أعلى.)
ملاحظة: لتمكين ميزات تخطيط من اليمين إلى اليسار لتطبيقك، يجب تعيين targetSdkVersion إلى " targetSdkVersion "true" وتعيين targetSdkVersion إلى 17 أو أعلى.

تمت إضافته في مستوى واجهة برمجة التطبيقات 17.
smallestWidth sw<N>dp

أمثلة:
sw320dp
sw600dp
sw720dp
إلخ
الحجم الأساسي للشاشة، كما هو مبين في أقصر بعد من مساحة الشاشة المتاحة. على وجه التحديد، أصغر عرض للجهاز هو أقصر من ارتفاع الشاشة المتاحة والعرض (قد تفكر أيضا في أنه "أصغر عرض ممكن" للشاشة). يمكنك استخدام هذا المؤهل للتأكد من أنه، بغض النظر عن التوجه الحالي للشاشة، التطبيق الخاص بك على الأقل <N> ديسيبل من العرض متاح لواجهة المستخدم الخاصة به.

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

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

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

320، للأجهزة مع تكوينات الشاشة مثل:
240x320 لدبي (هاتف كفغا)
320x480 مدبي (سماعة)
480x800 هدبي (الهاتف عالي الكثافة)
480، لشاشات مثل 480x800 مدبي (قرص / الهاتف).
600، لشاشات مثل 600x1024 مدبي (7 "قرص).
720، لشاشات مثل 720x1280 مدبي (10 "قرص).
عندما يوفر التطبيق الخاص بك أدلة موارد متعددة مع قيم مختلفة للمؤهلات الصغيرة، يستخدم النظام الأقرب إلى (دون تجاوز) أصغر عرض للجهاز.

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

انظر أيضا android:requiresSmallestWidthDp السمة، الذي يعلن الحد الأدنى سمالستويدث الذي التطبيق الخاص بك متوافق، وحقل التكوين smallestScreenWidthDp ، الذي يحمل قيمة الجهاز أصغر قيمة.

لمزيد من المعلومات حول التصميم للشاشات المختلفة واستخدام هذا التصفيات، راجع دليل مطوري دعم الشاشات المتعددة .
العرض المتوفر w<N>dp

أمثلة:
w720dp
w1024dp
إلخ
يحدد الحد الأدنى للعرض المتاح للشاشة، في وحدات dp التي يجب استخدام المورد فيها، والتي تم تحديدها بواسطة القيمة <N> . سوف تتغير قيمة التكوين هذه عندما يتغير اتجاه بين أفقي وعمودي لتتناسب مع العرض الفعلي الحالي.

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

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

راجع أيضا حقل تهيئة الشاشة screenWidthDp ، الذي يحمل عرض الشاشة الحالي.

لمزيد من المعلومات حول التصميم للشاشات المختلفة واستخدام هذا التصفيات، راجع دليل مطوري دعم الشاشات المتعددة .
الطول المتاح h<N>dp

أمثلة:
h720dp
h1024dp
إلخ
يحدد الحد الأدنى للارتفاع المتاح للشاشة، في وحدات "دب" التي يجب استخدام المورد فيها، والتي تحددها قيمة <N> . سوف تتغير قيمة التكوين هذه عندما يتغير اتجاه بين أفقي وعمودي لتتناسب مع الارتفاع الفعلي الحالي.

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

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

راجع أيضا حقل تكوين screenHeightDp الذي يحمل عرض الشاشة الحالي.

لمزيد من المعلومات حول التصميم للشاشات المختلفة واستخدام هذا التصفيات، راجع دليل مطوري دعم الشاشات المتعددة .
حجم الشاشة small
normal
large
xlarge
small : شاشات ذات حجم مماثل لشاشة كفغا منخفضة الكثافة. الحد الأدنى لحجم التخطيط لشاشة صغيرة ما يقرب من 320x426 دب وحدات. ومن الأمثلة على ذلك كفغا منخفضة الكثافة و فغا عالية الكثافة.
normal : شاشات ذات حجم مماثل لشاشة هفغا متوسطة الكثافة. الحد الأدنى لحجم التخطيط للشاشة العادية هو تقريبا 320x470 دب وحدات. أمثلة على هذه الشاشات و وفغا منخفضة الكثافة، هفغا متوسطة الكثافة، وفغا عالية الكثافة.
large : شاشات ذات حجم مشابه لشاشة فغا متوسطة الكثافة. الحد الأدنى لحجم التخطيط لشاشة كبيرة حوالي 480x640 دب وحدات. ومن الأمثلة على ذلك شاشات فغا و وفغا متوسطة الكثافة.
xlarge : الشاشات التي هي أكبر بكثير من التقليدية متوسطة الكثافة هفغا الشاشة. الحد الأدنى لحجم التخطيط لشاشة زلارج حوالي 720x960 دب وحدات. وفي معظم الحالات، تكون الأجهزة ذات الشاشات الكبيرة جدا كبيرة جدا بحيث لا يمكن حملها في الجيب، ومن المرجح أن تكون أجهزة على غرار أقراص. تمت إضافتها في مستوى واجهة برمجة التطبيقات 9.
ملاحظة: لا يعني استخدام مصفوفة الحجم أن الموارد مخصصة لشاشات بهذا الحجم فقط. إذا كنت لا توفر موارد بديلة مع المؤهلات التي تتطابق بشكل أفضل مع تكوين الجهاز الحالي، قد يستخدم النظام أي الموارد هي أفضل تطابق .

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

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

راجع دعم شاشات متعددة للحصول على مزيد من المعلومات.

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

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

انظر أيضا حقل تهيئة screenLayout ، مما يشير إلى ما إذا كانت الشاشة طويلة.
جولة الشاشة round
notround
round : شاشات جولة، مثل جهاز يمكن ارتداؤها جولة
notround : شاشات مستطيلة، مثل الهواتف أو الأجهزة اللوحية
تمت إضافتها في مستوى واجهة برمجة التطبيقات 23.

انظر أيضا طريقة التكوين isScreenRound() ، مما يشير إلى ما إذا كانت الشاشة مستديرة.
واسعة اللون widecg
nowidecg
{code ويدسغ}: يعرض مع مجموعة ألوان واسعة مثل ديسبلاي P3 أو أدوبيرغب
{code نويديسغ}: يعرض مع مجموعة ألوان ضيقة مثل سرجب
تمت إضافتها في مستوى أبي 26.

انظر أيضا طريقة تكوين isScreenWideColorGamut() ، مما يشير إلى ما إذا كانت الشاشة تحتوي على سلسلة ألوان واسعة.
النطاق الديناميكي العالي (هر) highdr
lowdr
{code هايدر}: يعرض مع نطاق عالي الديناميكية
{code لودر}: يعرض مع نطاق ديناميكي منخفض / قياسي
تمت إضافتها في مستوى أبي 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
ldpi : منخفضة الكثافة الشاشات. حوالي 120dpi.
mdpi : متوسطة الكثافة (على التقليدية هفغا) الشاشات. حوالي 160dpi.
hdpi : شاشات عالية الكثافة. حوالي 240dpi.
xhdpi : شاشات عالية الكثافة. حوالي 320dpi. تمت إضافتها في أبي ليفيل 8
xxhdpi : xxhdpi كثافة شاشات؛ ما يقرب من 480dpi. تمت إضافتها في المستوى أبي 16
xxxhdpi : اضافية خارج اضافية عالية الكثافة الاستخدامات (رمز قاذفة فقط، انظر مذكرة في دعم شاشات متعددة ). حوالي 640dpi. تمت إضافتها في المستوى أبي 18
nodpi : يمكن استخدام هذا لمصادر الصورة النقطية التي لا تريد أن يتم تحجيمها لتتناسب مع كثافة الجهاز.
tvdpi : شاشات في مكان ما بين مدبي و هدبي. حوالي 213dpi. ولا يعتبر ذلك مجموعة كثافة "أولية". ويهدف في الغالب للتلفزيونات ومعظم التطبيقات لا ينبغي أن تحتاج إليها، وتوفير مدبي والموارد هدبي كافية لمعظم التطبيقات والنظام سوف نطاقها حسب الاقتضاء. تمت إضافتها في أبي ليفيل 13
anydpi : هذا المؤهل يطابق جميع كثافة الشاشة ويأخذ الأسبقية على المؤهلات الأخرى. هذا مفيد للدوائر ناقلات . تمت إضافتها في مستوى أبي 21
هناك نسبة 3: 4: 6: 8: 12: 16 التحجيم بين الكثافات الأولية الستة (تجاهل كثافة تفدبي). لذلك، 9x9 النقطية في لدبي هو 12x12 في مدبي، 18x18 في هدبي، 24x24 في شدبي وهلم جرا.

إذا قررت أن موارد الصورة الخاصة بك لا تبدو جيدة بما فيه الكفاية على التلفزيون أو أجهزة معينة أخرى وتريد أن تجرب الموارد تفديبي، عامل التحجيم هو 1.33 * مدبي. على سبيل المثال، يجب أن تكون الصورة 100px x 100px لشاشات مدبي 133px x 133px ل تفدبي.

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

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

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

انظر أيضا حقول التكوين hardKeyboardHidden keyboardHidden hardKeyboardHidden ، والتي تشير إلى رؤية لوحة مفاتيح الأجهزة hardKeyboardHidden أي نوع من لوحة المفاتيح (بما في ذلك البرمجيات)، على التوالي.
طريقة إدخال النص الأساسي nokeys
qwerty
12key
nokeys : الجهاز ليس لديه مفاتيح الأجهزة لإدخال النص.
qwerty : يحتوي الجهاز على لوحة مفاتيح كويرتي للأجهزة، سواء كانت مرئية للمستخدم أم لا.
12key : جهاز يحتوي على لوحة مفاتيح الأجهزة 12 مفتاح، سواء كان مرئيا للمستخدم أم لا.
انظر أيضا حقل تكوين keyboard ، مما يشير إلى طريقة إدخال النص الأساسي المتاحة.
توفر مفتاح التنقل navexposed
navhidden
navexposed : تتوفر مفاتيح التنقل للمستخدم.
navhidden : مفاتيح التنقل غير متوفرة (مثل خلف غطاء مغلق).
هذا يمكن أن تتغير خلال حياة التطبيق الخاص بك إذا كان المستخدم يكشف عن مفاتيح التنقل. راجع التعامل مع تغييرات وقت التشغيل للحصول على معلومات حول كيفية تأثير ذلك على التطبيق أثناء وقت التشغيل.

راجع أيضا حقل تكوين navigationHidden ، الذي يشير إلى ما إذا كانت مفاتيح التنقل مخفية أم لا.
طريقة التنقل الأساسية التي لا تعمل باللمس nonav
dpad
trackball
wheel
nonav : الجهاز ليس لديه منشأة الملاحة بخلاف استخدام الشاشة التي تعمل باللمس.
dpad : الجهاز يحتوي على لوحة الاتجاه (د وسادة) للملاحة.
trackball : الجهاز لديه كرة التتبع للملاحة.
wheel : جهاز لديه عجلة الاتجاه (ق) للملاحة (غير المألوف).
انظر أيضا حقل تكوين navigation ، الذي يشير إلى نوع طريقة التنقل المتاحة.
إصدار المنصة (مستوى واجهة برمجة التطبيقات) أمثلة:
v3
v4
v7
إلخ
مستوى واجهة برمجة التطبيقات المدعوم من قبل الجهاز. على سبيل المثال، v1 لمستوى أبي 1 (الأجهزة المزودة بنظام التشغيل أندرويد 1.0 أو v4 الأحدث) و v4 لمستوى واجهة برمجة التطبيقات (الأجهزة التي تعمل بنظام التشغيل أندرويد 1.6 أو الإصدارات الأحدث). راجع مستند مستويات واجهة برمجة تطبيقات أندرويد لمزيد من المعلومات حول هذه القيم.
ملاحظة: تمت إضافة بعض المؤهلات التكوين منذ الروبوت 1.0، لذلك ليس كل إصدارات الروبوت دعم جميع المؤهلات. يؤدي استخدام مؤهل جديد ضمنا إلى إضافة مؤهل إصدار المنصة بحيث يتأكد من تجاهل الأجهزة القديمة. على سبيل المثال، w600dp استخدام مؤهل w600dp تلقائيا على مؤهل v13 ، لأن مؤهل العرض المتاح كان جديدا في مستوى واجهة برمجة التطبيقات 13. لتجنب أي مشاكل، يجب دائما تضمين مجموعة من الموارد الافتراضية (مجموعة من الموارد بدون أي مؤهلين ). لمزيد من المعلومات، راجع القسم حول توفير أفضل توافق الأجهزة مع الموارد .

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

يمكنك تحديد مؤهلات متعددة لمجموعة واحدة من الموارد، مفصولة بشروط. فعلى سبيل المثال، تنطبق drawable-en-rUS-land على الأجهزة الأمريكية - الإنجليزية في اتجاه أفقي.
يجب أن تكون المؤهلات بالترتيب الوارد في الجدول 2 . فمثلا:
خطأ: drawable-hdpi-port/
الصحيح: drawable-port-hdpi/
لا يمكن تداخل أدلة الموارد البديلة. على سبيل المثال، لا يمكن أن يكون لديك res/drawable/drawable-en/ .
القيم غير حساسة لحالة الأحرف. يقوم مترجم الموارد بتحويل أسماء الدليل إلى حالة أقل قبل المعالجة لتجنب حدوث مشكلات في أنظمة الملفات غير الحساسة للحالة. أي رسملة في الأسماء هي فقط للاستفادة من القراءة.
يتم دعم قيمة واحدة فقط لكل نوع مؤهل. على سبيل المثال، إذا كنت ترغب في استخدام نفس الملفات drawable-rES-rFR/ إسبانيا وفرنسا، لا يمكن أن يكون لديك دليل يسمى drawable-rES-rFR/ . بدلا من ذلك تحتاج drawable-rES/ للموارد، مثل drawable-rES/ و drawable-rES/ drawable-rFR/ ، والتي تحتوي على الملفات المناسبة. ومع ذلك، ليس مطلوبا منك بالفعل نسخ نفس الملفات في كلا الموقعين. بدلا من ذلك، يمكنك إنشاء اسم مستعار لمورد. راجع إنشاء موارد الاسم المستعار أدناه.
بعد حفظ الموارد البديلة في الدلائل المسماة مع هذه المؤهلات، الروبوت تلقائيا تطبيق الموارد في التطبيق الخاص بك على أساس تكوين الجهاز الحالي. في كل مرة يطلب فيها مورد، يتحقق نظام التشغيل أندرويد من أدلة الموارد البديلة التي تحتوي على ملف المورد المطلوب، ثم يجد أفضل مورد مطابق (تمت مناقشته أدناه). إذا لم تكن هناك موارد بديلة تتطابق مع تهيئة جهاز معين، فسيستخدم أندرويد الموارد الافتراضية المقابلة (مجموعة الموارد لنوع مورد معين لا يتضمن مؤهلا للتكوين).

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

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

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

Drawable
لإنشاء اسم مستعار لرسم موجود، استخدم العنصر <drawable> . فمثلا:


<?xml version="1.0" encoding="utf-8"?>
<resources>
   
<drawable name="icon">@drawable/icon_ca</drawable>
</resources>
إذا قمت بحفظ هذا الملف على أنه drawables.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 ، يتم 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>
توفير أفضل جهاز التوافق مع الموارد
لكي يقوم التطبيق الخاص بك بدعم تكوينات أجهزة متعددة، من المهم جدا أن توفر دائما الموارد الافتراضية لكل نوع من أنواع الموارد التي يستخدمها التطبيق.

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

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

توفير الموارد الافتراضية أمر مهم ليس فقط لأنه قد تشغيل التطبيق الخاص بك على التكوين الذي لم يكن يتوقع، ولكن أيضا لإصدارات جديدة من الروبوت في بعض الأحيان إضافة تصفيات التكوين من الإصدارات القديمة التي لا تدعم. إذا كنت تستخدم التصفيات المؤهلة لموارد جديدة، ولكن الحفاظ على التوافق الرمز مع الإصدارات القديمة من أندرويد، ثم عند تشغيل نسخة قديمة من تطبيق الروبوت الخاص بك، فإنه سوف تعطل إذا لم تقم بتوفير الموارد الافتراضية، لأنه لا يمكن استخدام الموارد اسمه مع الجديد تصفيات. على سبيل المثال، إذا كان لديك minSdkVersionتم تعيينها إلى 4، وكنت مؤهلا للجميع الموارد drawable باستخدام الوضع الليلي ( nightأوnotnight، والتي تمت إضافتها في مستوى API 8)، ثم على مستوى API 4 جهاز لا يمكن الوصول إلى موارد drawable الخاص بك وسوف تحطم الطائرة. في هذه الحالة، وربما كنت تريد notnightأن تكون الموارد الافتراضية، لذلك يجب استبعاد أن التصفيات المؤهلة لمن الموارد drawable الخاصة بك في أي drawable/أو drawable-night/.

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

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

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





drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
And assume the following is the device configuration:

Locale = en-GB 
Screen orientation = port 
Screen pixel density = hdpi 
Touchscreen type = notouch 
Primary text input method = 12key



وتحمل ما يلي هو تكوين الجهاز:

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

بمقارنة تكوين الجهاز إلى الموارد البديلة المتاحة، الروبوت يختار drawables من drawable-en-port.

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






لقضاء على ملفات الموارد التي تتعارض مع تكوين الجهاز.
و drawable-fr-rCA/يتم التخلص من دليل، لأنه يتعارض مع en-GBاللغة.

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

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

اختيار (المقبلة) أرفع الأسبقية تصفيات في القائمة ( الجدول 2 ). (ابدأ مع MCC، ثم نقل إلى أسفل.)
هل أي من الدلائل الموارد تشمل هذه التصفيات؟
إذا لا، والعودة إلى الخطوة 2 والنظر في التصفيات المؤهلة لنهائيات المقبلة. (في المثال، فإن الجواب هو "لا" حتى يتم الوصول إلى التصفيات المؤهلة للغة).
إذا كانت الإجابة نعم، انتقل إلى الخطوة 4.
القضاء الدلائل الموارد التي لا تتضمن هذه التصفيات. في المثال، نظام يلغي كافة الدلائل التي لا تتضمن تصفيات لغة:


drawable-en/
drawable-en-port/
drawable-en-notouch-12key/
The remaining directory is drawable-en-port.



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

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

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

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

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



الوصول إلى الموارد



نظرة سريعة


الموارد يمكن الرجوع إليها من التعليمات البرمجية باستخدام الأعداد الصحيحة من R.java ، مثل R.drawable.myimage
يمكن الرجوع إلى الموارد من الموارد باستخدام صيغة شمل الخاصة، مثل @drawable/myimage
يمكنك أيضا الوصول إلى موارد التطبيق باستخدام طرق في Resources




الطبقات الرئيسية

Resources
في هذه الوثيقة
الوصول إلى الموارد من الشفرة
الوصول إلى الموارد من شمل
سمات النمط المرجعي
الوصول إلى موارد النظام الأساسي
أنظر أيضا
توفير الموارد
أنواع الموارد


بعد تقديم مورد في طلبك (تمت مناقشته في توفير الموارد )، يمكنك تطبيقه من خلال الرجوع إلى معرف المورد. يتم تعريف جميع معرفات الموارد في فئة R لمشروعك، والتي aapt الأداة aapt تلقائيا.

عندما يتم تجميع التطبيق الخاص بك، aapt يولد الفئة R ، الذي يحتوي على معرفات الموارد لجميع الموارد في res/ الدليل الخاص بك. لكل نوع من الموارد، هناك فئة فرعية R (على سبيل المثال، R.drawable لجميع الموارد R.drawable )، ولكل مورد من هذا النوع، هناك عدد صحيح ثابت (على سبيل المثال، R.drawable.icon ). هذا العدد الصحيح هو معرف المورد الذي يمكنك استخدامه لاسترداد المورد الخاص بك.

على الرغم من أن فئة R حيث يتم تحديد معرفات الموارد، يجب أن لا تحتاج إلى أن ننظر هناك لاكتشاف معرف المورد. يتكون معرف المورد دائما من:

نوع المورد : يتم تجميع كل مورد في "نوع"، مثل string drawable layout . لمزيد من المعلومات حول الأنواع المختلفة، راجع أنواع الموارد .
اسم المورد ، وهو إما: اسم الملف، باستثناء التمديد؛ أو القيمة في android:name شمل android:name السمة نيم، إذا كان المورد قيمة بسيطة (مثل سلسلة).
هناك طريقتان يمكنك من خلالها الوصول إلى مورد:

في التعليمات البرمجية: استخدام عدد صحيح ثابت من فئة فرعية من الفئة R ، مثل:
  R.string.hello 
string هو نوع المورد و hello هو اسم المورد. هناك العديد من واجهات برمجة تطبيقات أندرويد التي يمكنها الدخول إلى مواردك عند تقديم معرف مورد بهذا التنسيق. راجع الوصول إلى الموارد في الشفرة .
في شمل: استخدام بناء شمل خاص يتوافق أيضا مع معرف المورد المحدد في الفئة R ، مثل:
  @ سلسلة / مرحبا 
string هو نوع المورد و hello هو اسم المورد. يمكنك استخدام هذه البنية في مورد شمل أي مكان حيث يتوقع أن يتم توفير قيمة في مورد. راجع الوصول إلى الموارد من شمل .
الوصول إلى الموارد في الشفرة
يمكنك استخدام مورد في التعليمات البرمجية عن طريق تمرير معرف المورد كمعلمة طريقة. على سبيل المثال، يمكنك تعيين res/drawable/myimage.png لاستخدام الموارد res/drawable/myimage.png باستخدام setImageResource() :



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

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

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

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

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

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

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

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




// 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
mFlipper
.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 عندما يتم تجميع المشروع الخاص بك. يتم تجاوز أية تغييرات في المرة التالية التي تجمع فيها.

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

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


<Button
   
android:layout_width="fill_parent"
   
android:layout_height="wrap_content"
   
android:text="@string/submit" />
بناء الجملة
في ما يلي بناء الجملة للإشارة إلى مورد في مورد شمل:

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

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


<?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 version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
   
android:src="@drawable/other_drawable" />
هذا يبدو زائدا، ولكن يمكن أن تكون مفيدة جدا عند استخدام الموارد البديلة. مزيد من المعلومات حول إنشاء موارد الاسم المستعار .

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

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

 ؟ [ <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:textColorSecondary سمة android:textColorSecondary نمط كقيمة android:textColor في هذه القطعة. لأن أداة الموارد النظام يعرف أن من المتوقع مورد السمة في هذا السياق، لا تحتاج إلى صراحة نوع (الذي سيكون ?android:attr/textColorSecondary ) -يمكنك استبعاد نوع attr .

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


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



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







Handling Configuration Changes

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


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

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

يمكن العثور على تفاصيل حول كيفية استخدام onSaveInstanceState() في حفظ واستعادة حالة النشاط .

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

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

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

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

للاحتفاظ بالأشياء الثابتة في جزء أثناء تغيير تكوين وقت التشغيل:

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



public class RetainedFragment extends Fragment {

   
// data object we want to retain
   
private MyDataObject data;

   
// this method is only called once for this fragment
   
@Override
   
public void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
       
// retain this fragment
        setRetainInstance
(true);
   
}

   
public void setData(MyDataObject data) {
       
this.data = data;
   
}

   
public MyDataObject getData() {
       
return data;
   
}
}


بينما يتم استدعاء onCreate() مرة واحدة فقط عند إنشاء الجزء المحتفظ به أولا يمكنك استخدام onAttach() أو onActivityCreated() لمعرفة متى يكون نشاط onActivityCreated() جاهزا للتفاعل مع هذا الجزء.

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

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




public class MyActivity extends Activity {

   
private static final String TAG_RETAINED_FRAGMENT = "RetainedFragment";

   
private RetainedFragment mRetainedFragment;

   
@Override
   
public void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView
(R.layout.main);

       
// find the retained fragment on activity restarts
       
FragmentManager fm = getFragmentManager();
        mRetainedFragment
= (RetainedFragment) fm.findFragmentByTag(TAG_RETAINED_FRAGMENT);

       
// create the fragment and data the first time
       
if (mRetainedFragment == null) {
           
// add the fragment
            mRetainedFragment
= new RetainedFragment();
            fm
.beginTransaction().add(mRetainedFragment, TAG_RETAINED_FRAGMENT).commit();
           
// load data from a data source or perform any calculation
            mRetainedFragment
.setData(loadMyData());
       
}

       
// the data is available in mRetainedFragment.getData() even after
       
// subsequent configuration change restarts.
       
...
   
}
}

في هذا المثال، onCreate() يضيف جزء أو يستعيد مرجع إليها. onCreate() أيضا تخزين الكائن الدولة داخل مثيل جزء.

من أجل الاستباقية إزالة جزء الاحتفاظ عندما لم تعد بحاجة إليها، يمكنك التحقق من isFinishing() في onPause() في النشاط.



  @Override
   
public void onPause() {
       
// perform other onPause related actions
       
...
       
// this means that this activity will not be recreated now, user is leaving it
       
// or the activity is otherwise finishing
       
if(isFinishing()) {
           
FragmentManager fm = getFragmentManager();
           
// we will not need this fragment anymore, this may also be a good place to signal
           
// to the retained fragment object to perform its own cleanup.
            fm
.beginTransaction().remove(mDataFragment).commit();
       
}
   
}
تحذير: أثناء تخزين أي كائن، يجب عدم تمرير كائن مرتبط Drawable مثل Drawable أو Adapter أو View أو أي كائن آخر مرتبط Drawable . إذا قمت بذلك، فإنه سيتم تسرب جميع وجهات النظر والموارد من مثيل النشاط الأصلي. (تعني موارد التسريب أن التطبيق الخاص بك يحافظ على تعليق عليها، وأنها لا يمكن جمع القمامة، لذلك الكثير من الذاكرة يمكن أن تضيع.)

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

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

لإعلان أن نشاطك يعالج تغييرا في التكوين، عدل عنصر <activity> المناسب في ملف البيان لتضمين السمة android:configChanges مع قيمة تمثل التهيئة التي تريد التعامل معها. يتم سرد القيم المحتملة في وثائق android:configChanges السمة (القيم الأكثر شيوعا هي "orientation" لمنع إعادة تشغيل عندما يتغير اتجاه الشاشة و "keyboardHidden" android:configChanges "keyboardHidden" لمنع إعادة تشغيل عند تغيير توافر لوحة المفاتيح). يمكنك الإعلان عن قيم تكوين متعددة في السمة بفصلها مع أنبوب | حرف.

على سبيل المثال، توضح التعليمات البرمجية البرمجية التالية نشاطا يتعامل مع كل من تغيير اتجاه الشاشة وتغيير توفر لوحة المفاتيح:



<activity android:name=".MyActivity"
         
android:configChanges="orientation|keyboardHidden"
         
android:label="@string/app_name">
الآن، عند تغيير أحد هذه التهيئات، لا يتم إعادة تشغيل MyActivity . بدلا من ذلك، يتلقى MyActivity مكالمة إلى onConfigurationChanged() . يتم تمرير هذه الطريقة كائن Configuration الذي يحدد تكوين الجهاز الجديد. من خلال قراءة الحقول في Configuration ، يمكنك تحديد التكوين الجديد وإجراء التغييرات المناسبة عن طريق تحديث الموارد المستخدمة في الواجهة. في الوقت الذي يتم فيه استدعاء هذه الطريقة، يتم تحديث كائن Resources لنشاطك لإرجاع الموارد استنادا إلى التهيئة الجديدة، حتى تتمكن من إعادة تعيين عناصر واجهة المستخدم بسهولة دون إعادة تشغيل النظام لنشاطك.

تنبيه: بدءا من أندرويد 3.2 (مستوى أبي 13)، يتغير أيضا "حجم الشاشة" عندما يتحول الجهاز بين الاتجاه العمودي والمناظر الطبيعية. وبالتالي، إذا كنت ترغب في منع إعادة تشغيل وقت التشغيل بسبب تغيير التوجه عند تطوير مستوى أبي 13 أو أعلى (كما هو minSdkVersion targetSdkVersion سمات targetSdkVersion و targetSdkVersion )، يجب تضمين قيمة "screenSize" بالإضافة إلى قيمة "screenSize" . وهذا هو، يجب android:configChanges="orientation|screenSize" . ومع ذلك، إذا كان تطبيقك يستهدف مستوى واجهة برمجة التطبيقات (12) أو أقل، فسيتعامل نشاطك دائما مع تغيير التهيئة نفسه (لا يؤدي هذا التغيير في التهيئة إلى إعادة تشغيل نشاطك، حتى عند التشغيل على جهاز يعمل بنظام التشغيل أندرويد 3.2 أو أحدث).

على سبيل المثال، يتحقق تنفيذ onConfigurationChanged() التالي على اتجاه الجهاز الحالي:




@Override
public void onConfigurationChanged(Configuration newConfig) {
   
super.onConfigurationChanged(newConfig);

   
// Checks the orientation of the screen
   
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
       
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
   
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
       
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
   
}
}


يمثل عنصر Configuration كافة التوصيفات الحالية، وليس فقط تلك التي تم تغييرها. في معظم الأحيان، لن تهتم بالضبط كيف تغير التكوين ويمكن ببساطة إعادة تعيين كل ما تبذلونه من الموارد التي توفر بدائل للتكوين الذي كنت التعامل معها. على سبيل المثال، لأنه يتم تحديث كائن Resources الآن، يمكنك إعادة تعيين أي setImageResource() s مع setImageResource() ويتم استخدام المورد المناسب للتكوين الجديد (كما هو موضح في توفير الموارد ).

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

تذكر: عندما تعلن نشاطك للتعامل مع تغيير في التهيئة، فأنت مسؤول عن إعادة تعيين أي عناصر توفر بدائل لها. إذا قمت بإعلان نشاطك للتعامل مع تغيير التوجه ولها صور يجب تغييرها بين أفقي وصورة، يجب إعادة تعيين كل مورد لكل عنصر أثناء onConfigurationChanged() .

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

لمزيد من المعلومات حول تغييرات التكوين التي يمكنك التعامل معها في نشاطك، راجع وثائق android:configChanges وفئة Configuration . 






الموقع   



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



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

تصف هذه الوثيقة أفضل الممارسات لتوطين تطبيقات أندرويد.

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

ومن الممارسة السليمة استخدام إطار موارد أندرويد لفصل الجوانب المترجمة للتطبيق الخاص بك قدر الإمكان من وظائف جافا الأساسية:

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

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

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

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

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

مثال:

يشير رمز جافا للتطبيق إلى سلسلتين فقط، وهما text_a و text_b . يتضمن هذا التطبيق ملف الموارد المترجمة ( res/values-en/strings.xml text_a res/values-en/strings.xml ) الذي يعرف text_a و text_b باللغة الإنجليزية. يتضمن هذا التطبيق أيضا ملف مورد افتراضي ( res/values/strings.xml ) يتضمن تعريفا text_a ، ولكن ليس text_b :

عندما يتم تشغيل هذا التطبيق على جهاز مع مجموعة اللغة إلى اللغة الإنجليزية، قد تشغيل التطبيق دون مشكلة، لأن res/values-en/strings.xml يحتوي على كل من سلاسل النص المطلوبة.
ومع ذلك، سوف يرى المستخدم رسالة خطأ وزر فورس كلوز عند تشغيل هذا التطبيق على جهاز تعيين إلى لغة أخرى غير الإنجليزية. لن يتم تحميل التطبيق.
لمنع هذا الوضع، تأكد من وجود ملف res/values/strings.xml وأنه يحدد كل سلسلة مطلوبة. ينطبق الوضع على جميع أنواع الموارد، وليس فقط السلاسل: تحتاج إلى إنشاء مجموعة من ملفات الموارد الافتراضية التي تحتوي على كافة الموارد التي يطلبها التطبيق الخاص بك - تخطيطات، الرسوم القابلة للتحميل، والرسوم المتحركة، وما إلى ذلك للحصول على معلومات حول الاختبار، انظر اختبار الافتراضي الموارد .

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

res/values/strings.xml ( res/values/strings.xml ديركتوري)

يجب أن تستخدم السلاسل النصية في res/values/strings.xml اللغة الافتراضية، وهي اللغة التي تتوقع أن يتحدث عنها معظم مستخدمي التطبيق.

يجب أن تتضمن مجموعة الموارد الافتراضية أيضا أي رسم تخطيطي افتراضي وتخطيطات، ويمكن أن تتضمن أنواعا أخرى من الموارد مثل الرسوم المتحركة. 
res/drawable/ (مطلوب دليل عقد ملف رسم واحد على الأقل، لرمز التطبيق على غوغل بلاي) 
res/layout/ (مطلوب الدليل الذي يحمل ملف شمل الذي يحدد التخطيط الافتراضي) 
res/anim/ (مطلوب إذا كان لديك أي res/anim- <qualifiers> المجلدات) 
res/xml/ ( res/xml- <qualifiers> إذا كان لديك أي res/xml- <qualifiers> ) 
res/raw/ (مطلوب إذا كان لديك أي res/raw- <qualifiers> المجلدات)

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

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

يمكن للتطبيق تحديد العديد من res/ <qualifiers> / الدلائل، ولكل منها مؤهلات مختلفة. لإنشاء مورد بديل لغة مختلفة، يمكنك استخدام مؤهل يحدد لغة أو تركيبة لغة-منطقة. (يجب أن يتوافق اسم دليل الموارد مع نظام التسمية الموضح في توفير موارد بديلة ، وإلا لن يتم تجميعه).

مثال:

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

res/values/strings.xml 
يحتوي على نص باللغة الإنجليزية لجميع السلاسل التي يستخدمها التطبيق، بما في ذلك نص لسلسلة اسم مسمى.
res/values-fr/strings.xml 
تحتوي على نص فرنسي لجميع السلاسل، بما في ذلك title .
res/values-ja/strings.xml 
تحتوي على نص ياباني لجميع السلاسل باستثناء title . 
إذا كان رمز جافا الخاص بك يشير إلى R.string.title ، وهنا هو ما سيحدث في وقت التشغيل:

إذا تم تعيين الجهاز على أي لغة غير الفرنسية، فإن الروبوت تحميل title من ملف res/values/strings.xml .
إذا تم تعيين الجهاز إلى الفرنسية، الروبوت تحميل title من ملف res/values-fr/strings.xml .
لاحظ أنه إذا تم تعيين الجهاز إلى اليابانية، وسوف الروبوت تبحث عن title في ملف res/values-ja/strings.xml . ولكن لأنه لم يتم تضمين مثل هذه السلسلة في هذا الملف، الروبوت سوف تعود إلى الافتراضي، وسوف تحميل title باللغة الإنجليزية من ملف res/values/strings.xml .

ما هي الموارد التي تأخذ الأسبقية؟
إذا تطابقت ملفات موارد متعددة مع تهيئة الجهاز، يتبع أندرويد مجموعة من القواعد في تحديد الملف الذي تريد استخدامه. من بين المؤهلات التي يمكن تحديدها في اسم دليل الموارد، لغة دائما تقريبا الأسبقية .

مثال:

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

res/drawable/ 
يحتوي على الرسومات الافتراضية.
res/drawable-small-land-stylus/ 
يحتوي على رسومات محسنة للاستخدام مع الجهاز الذي يتوقع الإدخال من القلم ويحتوي على شاشة كفغا منخفضة الكثافة في اتجاه أفقي.
res/drawable-ja/ 
يحتوي على الرسومات الأمثل للاستخدام مع اليابانية.
إذا كان التطبيق يعمل على الجهاز الذي تم تكوينه لاستخدام اليابانية، سوف الروبوت تحميل الرسومات من res/drawable-ja/ ، حتى لو كان الجهاز يحدث ليكون واحد التي تتوقع الإدخال من القلم ويحتوي على شاشة كفغا منخفضة الكثافة في المشهد اتجاه.

استثناء: المؤهلات الوحيدة التي لها الأسبقية على اللغة في عملية الاختيار هي مسك و منك (رمز البلد المحمول ورمز شبكة الجوال).

مثال:

افترض أن لديك الوضع التالي:

رمز التطبيق يدعو إلى R.string.text_a
يتوفر ملفان من الموارد ذات الصلة:
res/values-mcc404/strings.xml ، والذي يتضمن text_a في اللغة الافتراضية للتطبيق، في هذه الحالة الإنجليزية.
res/values-hi/strings.xml text_a res/values-hi/strings.xml ، والذي يتضمن text_a باللغة الهندية.
يتم تشغيل التطبيق على جهاز يحتوي على التكوين التالي:
ترتبط بطاقة سيم بشبكة جوال في الهند (مسك 404).
يتم تعيين اللغة إلى الهندية ( hi ).
سيحمل أندرويد text_a من res/values-mcc404/strings.xml (باللغة الإنجليزية)، حتى إذا تم تهيئة الجهاز باللغة الهندية. ويرجع ذلك إلى أن أندرويد سيفضل في عملية اختيار الموارد مطابقة مسك عبر مطابقة اللغة.

عملية الاختيار ليست دائما واضحة كما تقترح هذه الأمثلة. يرجى قراءة كيفية العثور على الروبوت أفضل مورد مطابقة للحصول على وصف أكثر دقة من العملية. ويرد وصف لجميع المؤهلات وأدرجت حسب ترتيب الأسبقية في الجدول 2 المتعلق بتوفير موارد بديلة .

بالإشارة إلى الموارد في جافا
في التعليمات البرمجية جافا التطبيق الخاص بك، يمكنك الرجوع إلى الموارد باستخدام بناء الجملة R. resource_type . resource_name R. resource_type . resource_name أو android.R. resource_type . resource_name android.R. resource_type . resource_name android.R. resource_type . resource_name . لمزيد من المعلومات عن هذا، راجع الوصول إلى الموارد .

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

إذا قمت بإنشاء الصور مع النص، ووضع تلك السلاسل في strings.xml كذلك، وتجديد الصور بعد الترجمة.

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

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

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

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

هنا مثال:
<!-- The action for submitting a form. This text is on a button that can fit 30 chars -->
<string name="login_submit_button">Sign in</string>
النظر في توفير معلومات السياق التي قد تشمل:

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

لوضع علامة على نص لا يجب ترجمته، استخدم علامة <xliff:g> . في ما يلي علامة مثال تضمن عدم تغيير النص \ "٪ 1 $ s \" أثناء الترجمة (وإلا فقد يؤدي ذلك إلى كسر الرسالة):



<string name="countdown">
 
<xliff:g id="time" example="5 days>%1$s</xliff:g>until holiday</string>

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

في ما يلي بعض الأمثلة الأخرى لعلامات العناصر النائبة:





<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Example placeholder for a special unicode symbol -->
<string name="star_rating">Check out our 5
   
<xliff:g id="star">\u2605</xliff:g>
</string>
<!-- Example placeholder for a for a URL -->
<string name="app_homeurl">
    Visit us at
<xliff:g id="application_homepage">http://my/app/home.html</xliff:g>
</string>
<!-- Example placeholder for a name -->
<string name="prod_name">
    Learn more at
<xliff:g id="prod_gamegroup">Game Group</xliff:g>
</string>
<!-- Example placeholder for a literal -->
<string name="promo_message">
    Please use the "
<xliff:g id="promotion_code">ABCDEFG</xliff:g>" to get a discount.</string>
...
</resources>

Localization Checklist



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

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

هام: تأكد من أن التطبيق يتضمن مجموعة كاملة من الموارد الافتراضية.

تأكد من تضمين res/drawable/ و res/drawable/ (بدون أي معدلات إضافية في أسماء المجلدات) التي تحتوي على جميع الصور والنصوص التي يحتاجها التطبيق.

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

لمزيد من المعلومات، راجع اختبار الموارد الافتراضية .

تصميم تخطيط مرن
إذا كنت بحاجة إلى إعادة ترتيب التنسيق لتتناسب مع لغة معينة (على سبيل المثال الألمانية مع كلماتها الطويلة)، يمكنك إنشاء تخطيط بديل لتلك اللغة (على سبيل المثال res/layout-de/main.xml ). ومع ذلك، فإن القيام بذلك يمكن أن يجعل التطبيق الخاص بك أصعب للحفاظ على. فمن الأفضل لإنشاء تخطيط واحد هو أكثر مرونة.

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

إنشاء تخطيط واحد مع حقل يمكنك تمكين أو تعطيل برمجيا، استنادا إلى اللغة، أو
اجعل التخطيط الرئيسي يتضمن تخطيطا آخر يتضمن الحقل القابل للتغيير. يمكن أن يكون للتخطيط الثاني تكوينات مختلفة للغات مختلفة.
تجنب إنشاء المزيد من ملفات الموارد والسلاسل النصية مما تحتاج إليه
ربما لا تحتاج إلى إنشاء بديل محدد اللغة لكل مورد في التطبيق الخاص بك. على سبيل المثال، التخطيط المحدد في ملف res/layout/main.xml قد يعمل في أي لغة، وفي هذه الحالة لن تكون هناك حاجة لإنشاء أي ملفات تخطيط بديلة.

أيضا، قد لا تحتاج إلى إنشاء نص بديل لكل سلسلة. على سبيل المثال، افترض ما يلي:

اللغة الافتراضية للتطبيق هي الإنجليزية الأمريكية. يتم تعريف كل سلسلة يستخدمها التطبيق، باستخدام هجاء الإنجليزية الأمريكية، في res/values/strings.xml .
لبضع العبارات الهامة، كنت ترغب في توفير هجاء اللغة الإنجليزية البريطانية. تريد استخدام هذه السلاسل البديلة عند تشغيل التطبيق على جهاز في المملكة المتحدة.
للقيام بذلك، يمكنك إنشاء ملف صغير يسمى res/values-en-rGB/strings.xml يتضمن فقط السلاسل التي يجب أن تكون مختلفة عند تشغيل التطبيق في المملكة المتحدة بالنسبة لبقية السلاسل، فإن التطبيق سوف تقع والعودة إلى الإعدادات الافتراضية واستخدام ما تم تعريفه في res/values/strings.xml .

استخدم عنصر سياق أندرويد للبحث اليدوي المحلي
يمكنك البحث عن اللغة باستخدام كائن Context الذي يوفر الروبوت:




String locale = context.getResources().getConfiguration().locale.getDisplayName();

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

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

لتغيير اللغة أو اللغة على جهاز، استخدم تطبيق الإعدادات.

اختبار على المحاكي
للحصول على تفاصيل حول استخدام المحاكي، اطلع على الاطلاع على محاكي أندرويد .

إنشاء لغة مخصصة واستخدامها
اللغة "المخصصة" هي تركيبة لغة / منطقة لا تدعمها صورة نظام أندرويد بشكل صريح. يمكنك اختبار كيفية تشغيل التطبيق الخاص بك في لغة مخصصة من خلال إنشاء لغة مخصصة في المحاكي. هناك طريقتان للقيام بذلك:

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

تغيير لغة المحاكي من قذيفة بنك التنمية الآسيوي
لتغيير اللغة في المحاكي باستخدام قذيفة بنك التنمية الآسيوي.

اختر اللغة التي تريد اختبارها وتحديد علامة لغة بكب-47، على سبيل المثال، الفرنسية الكندية ستكون fr-CA . 
إطلاق محاكي.
من قذيفة سطر الأوامر على الكمبيوتر المضيف، قم بتشغيل الأمر التالي: 
adb shell 
أو إذا كان لديك جهاز مرفق، حدد أنك تريد المحاكي بإضافة الخيار -e : 
adb -e shell
في موجه شل بنك التنمية الآسيوي ( # )، قم بتشغيل هذا الأمر: 
setprop persist.sys.locale [ BCP-47 language tag ];stop;sleep 5;start 
يستعاض عن الأقواس المعقوفة بين قوسين بالرموز المناسبة من الخطوة 1.
على سبيل المثال، لاختبار باللغة الفرنسية الكندية:

setprop persist.sys.locale fr-CA;stop;sleep 5;start

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

اختبار الموارد الافتراضية
وإليك كيفية اختبار ما إذا كان التطبيق يتضمن كل مورد سلسلة يحتاج إليه:

تعيين المحاكي أو الجهاز إلى اللغة التي لا يدعم التطبيق الخاص بك. على سبيل المثال، إذا كان التطبيق يحتوي على سلاسل الفرنسية في res/values-fr/ ولكن ليس لديها أي السلاسل الإسبانية في res/values-es/ ، ثم تعيين لغة المحاكي إلى الإسبانية. (يمكنك استخدام تطبيق الإعدادات المخصصة لتعيين المحاكي إلى لغة محلية غير مدعومة.)
تشغيل التطبيق.
إذا كان التطبيق يظهر رسالة خطأ وزر فورس كلوز قد يبحث عن سلسلة غير متوفرة. تأكد من أن ملف res/values/strings.xml يتضمن تعريفا لكل سلسلة يستخدمها التطبيق.
إذا نجح الاختبار، كرر ذلك لأنواع أخرى من التكوينات. على سبيل المثال، إذا كان التطبيق يحتوي على ملف تخطيط يسمى res/layout-land/main.xml ولكنه لا يحتوي على ملف يسمى res/layout-port/main.xml ، res/layout-port/main.xml بتعيين المحاكي أو الجهاز على الاتجاه العمودي ومعرفة ما إذا كان سيتم تشغيل التطبيق








اختبار التطبيق الخاص بك مع بسيودولوكاليس










تمكين بسيودولوكاليس
قضايا التعريب الفوري


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


الشكل 1. الإنجليزية (زا) بسيودولوكيل

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

توفر منصة أندرويد اثنين من بسيودولوكاليس التالية لتمثيل من اليسار إلى اليمين (لتر) واليمين إلى اليسار (رتل) اللغات:


الشكل 2. أر (شب) بسيودولوكيل

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

أر (شب): يحدد اتجاه النص للرسائل من اليسار إلى اليمين الأصلية إلى الاتجاه من اليمين إلى اليسار، مما يعكس ترتيب الأحرف في الرسالة الأصلية. يظهر أر (شب) بسيودولوكيل في الشكل 2.

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

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

لاستخدام بسيودولوكاليس الروبوت، يجب تشغيل أندرويد 4.3 (أبي مستوى 18) أو أعلى ولها خيارات المطور تمكين على جهازك.

يوضح الإجراء التالي كيفية تمكين الكاذب بسيودولوكاليس:

في الروبوت ستوديو تمكين بسيودولوكاليس لتطبيق معين بإضافة التكوين التالي إلى ملف build.gradle الخاص بك، على النحو التالي:

android {
 
...
  buildTypes
{
    debug
{
     
pseudoLocalesEnabled true
   
}
 
}









إنشاء التطبيق وتشغيله .

الشكل 3. حدد بسيودولوكيل

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

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





التدويل على الروبوت
في هذه الوثيقة:
يونيكود وتدويل الدعم من خلال الروبوت 6.0 (أبي مستوى 23)
الإصدارات
يونيكود وتدويل الدعم في الروبوت 7.0 (أبي مستوى 24) وأعلى
ICU4J على الروبوت
الترحيل إلى واجهات برمجة التطبيقات android.icu من ICU4J
الإصدارات
الترخيص
أنظر أيضا
وثائق ل ICU4J
أحدث المعايير التي يدعمها ICU4J
الروبوت روافع مكتبة وحدة العناية المركزة ومشروع كلدر لتوفير يونيكود ودعم التدويل الأخرى. تنقسم مناقشة هذه الوثيقة لدعم يونيكود وتدويل إلى قسمين: الروبوت 6.0 (أبي مستوى 23) وأقل، والروبوت 7.0 (أبي مستوى 24) وأعلى.

يونيكود وتدويل الدعم من خلال الروبوت 6.0 (أبي مستوى 23)
يستخدم منصة أندرويد إيكو و كلدر لتنفيذ فئات مختلفة للتعامل مع كل من اللاتينية وغير اللاتينية التصويبات، وفضح فئات مثل Locale ، Character ، والعديد من الفئات الفرعية من java.text . التطبيق الذي وظائف التدويل خارج الفئات المكشوفة، ويستهدف إصدارات المنصة من خلال الروبوت 6.0 (أبي مستوى 23)، يجب أن تشمل مكتبة وحدة العناية المركزة في أبك لها.

الإصدارات
الإصدارات المتتالية من منصة أندرويد تتوافق مع الإصدارات الأحدث من وحدة العناية المركزة (و كلدر ونسخ يونيكود المقابلة). ويبين الجدول 1 هذه المراسلات من خلال الروبوت 6.0 (أبي مستوى 23).

الجدول 1. إيكو والإصدارات كلدر المستخدمة من خلال الروبوت 6.0 (أبي مستوى 23).
المنصة (مستوى واجهة برمجة التطبيقات) ICU CLDR يونيكود
أندرويد 1.5-2.0 (أبي ليفلز 3-7) 3.8 1.5 5.0
أندرويد 2.2 (مستوى واجهة برمجة التطبيقات 8) 4.2 1.7 5.1
أندرويد 2.3-3.0 (مستويات واجهة برمجة التطبيقات 9-13) 4.4 1.8 5.2
أندرويد 4.0 (مستويات واجهة برمجة التطبيقات 14-15) 4.6 1.9 6.0
أندرويد 4.1 (مستويات واجهة برمجة التطبيقات 16-17) 4.8 2.0 6.0
أندرويد 4.3 (مستوى واجهة برمجة التطبيقات 18) 50 22.1 6.2
أندرويد 4.4 (مستويات واجهة برمجة التطبيقات 19-20) 51 23 6.2
أندرويد 5.0 (أبي ليفلز 21-22) 53 25 6.3
أندرويد 6.0 (مستوى واجهة برمجة التطبيقات 23) 55.1 27.0.1 7.0
يمكن للتطبيقات التي تستهدف أندرويد 7.0 (مستوى واجهة برمجة التطبيقات 24) أو أعلى الحصول على دعم أكثر شمولا ل ونيكود والتدويل الذي يتعرض له إطار أندرويد. يقدم القسم التالي من هذه الوثيقة تفاصيل حول هذا الدعم.

يونيكود وتدويل الدعم في الروبوت 7.0 (أبي مستوى 24) وأعلى
بدءا من الروبوت 7.0 (أبي مستوى 24)، منصة أندرويد يعرض مجموعة فرعية من واجهات برمجة التطبيقات ICU4J لمطوري التطبيقات لاستخدامها ضمن حزمة android.icu . ICU4J هي مجموعة مفتوحة المصدر، تستخدم على نطاق واسع من مكتبات جافا التي توفر ونيكود وتدويل الدعم لتطبيقات البرمجيات.

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

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

ICU4J على الروبوت
الروبوت يعرض مجموعة فرعية من واجهات برمجة التطبيقات ICU4J عبر حزمة android.icu ، بدلا من com.ibm.icu . قد يختار إطار أندرويد عدم الكشف عن واجهات برمجة التطبيقات ICU4J لأسباب مختلفة: على سبيل المثال، لأن واجهات برمجة التطبيقات تم إيقافها أو لم يتم إعلانها مستقرة. وبما أن فريق العناية المركزة ينقص واجهات برمجة التطبيقات في المستقبل، فإن أندرويد سيحددها أيضا على أنها مهملة ولكن ستستمر في تضمينها.

إليك بعض الأمور المهمة التي يجب ملاحظتها:

لا تتضمن واجهات برمجة التطبيقات إطار عمل ICU4J الروبوت كافة واجهات برمجة التطبيقات ICU4J.
و ندك لا يدعم الروبوت ICU4C.
لا تحل واجهات برمجة التطبيقات في إطار أندرويد محل دعم أندرويد للتوطين باستخدام الموارد .
في بعض الحالات، إطار الروبوت يدعم أكثر من الأحرف من المكتبات وحدة العناية المركزة. هذا صحيح، على سبيل المثال، من دعم فئة android.text تعبيرية.
الترحيل إلى حزمة android.icu من com.ibm.icu
إذا كنت تستخدم بالفعل واجهات برمجة التطبيقات ICU4J في التطبيق الخاص بك، واجهات برمجة التطبيقات android.icu تلبية الاحتياجات الخاصة بك، ثم الترحيل إلى واجهات برمجة التطبيقات الإطار يتطلب منك تغيير واردات جافا الخاص بك من com.ibm.icu إلى android.icu . يمكنك بعد ذلك إزالة النسخة الخاصة بك من ملفات ICU4J من أبك.

ملاحظة : تستخدم واجهات برمجة التطبيقات إطار ICU4J مساحة الاسم android.icu بدلا من com.ibm.icu . هذا هو لتجنب الصراعات مساحة الأسماء في com.ibm.icu التي تحتوي على مكتبات com.ibm.icu الخاصة بهم.

الترحيل إلى واجهات برمجة التطبيقات android.icu من واجهات برمجة تطبيقات أندرويد سك الأخرى
بعض الطبقات في حزم java android لها معادلات لتلك الموجودة في ICU4J. ومع ذلك، غالبا ما يوفر ICU4J دعما أوسع للمعايير واللغات.

ويبين الجدول 2 بعض الأمثلة على هذه المعادلات لتبدأ:

جدول 2. الطبقات أندرويد و جافا ICU4J
صف دراسي البدائل
java.lang.Character android.icu.lang.UCharacter
java.text.BreakIterator android.icu.text.BreakIterator
java.text.DecimalFormat android.icu.text.DecimalFormat
java.util.Calendar android.icu.util.Calendar
android.text.BidiFormatter android.icu.text.Bidi
android.text.format.DateFormat android.icu.text.DateFormat
android.text.format.DateUtils android.icu.text.DateFormat android.icu.text.RelativeDateTimeFormatter
الإصدارات
الإصدارات المتتالية من منصة أندرويد تتوافق مع الإصدارات الأحدث من وحدة العناية المركزة (و كلدر ونسخ يونيكود المقابلة). ويبين الجدول 3 هذه المراسلات بدءا من الروبوت 7.0 (أبي مستوى 24).

الجدول 3. إيكو و كلدر الإصدارات المستخدمة في الروبوت 7.0 (أبي مستوى 24) وأعلى.
المنصة (مستوى واجهة برمجة التطبيقات) ICU CLDR يونيكود
أندرويد 7.0-7.1 (مستويات واجهة برمجة التطبيقات 24-25) 56 28 ثمانية
الروبوت O 58.2 30.0.3 تسعة
الترخيص
يتم إصدار ICU4J تحت رخصة وحدة العناية المركزة. للحصول على التفاصيل، راجع دليل مستخدم وحدة العناية المركزة.





اللغة واللغة





في هذه الوثيقة:
التحديات في حل الموارد اللغوية
تحسينات في استراتيجية حل الموارد
تصميم التطبيق لدعم المواقع المحلية الإضافية


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

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

التحديات في حل الموارد اللغوية
قبل أندرويد 7.0، الروبوت لا يمكن أن تتطابق دائما التطبيق والنظام المحلي.

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

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

النظام أيضا أن تخلف en_US إذا اختار المستخدم لغة أن التطبيق لا يدعم على الإطلاق، مثل الفرنسية. فمثلا:

جدول 1. حل الموارد بدون مطابقة لغة محددة.
إعدادات المستخدم موارد التطبيق حل الموارد
User SettingsApp ResourcesResource Resolution
fr_CHdefault (en)
de_DE
es_ES
fr_FR
it_IT
Try fr_CH => Fail
Try fr => Fail
Use default (en)


استخدام الإعداد الافتراضي (إن)
في هذا المثال، يعرض النظام السلاسل الإنجليزية دون معرفة ما إذا كان يمكن للمستخدم فهم اللغة الإنجليزية. هذا السلوك شائع جدا اليوم.

تحسينات في استراتيجية حل الموارد
الروبوت 7.0 (أبي مستوى 24) يجلب أكثر دقة الموارد قوية، ويجد تراجع أفضل تلقائيا. ومع ذلك، لتسريع القرار وتحسين الصيانة، يجب تخزين الموارد في اللهجة الأم الأكثر شيوعا. على سبيل المثال، إذا كنت تخزن الموارد الإسبانية في دليل values-es-rUS قبل، values-es-rUS values-b+es+419 الذي يحتوي على الإسبانية اللاتينية. وبالمثل، إذا كان لديك سلاسل موارد في دليل اسمه values-en-rGB ، values-en-rGB تسمية الدليل إلى values-en-rGB values-b+en+001 (الإنجليزية الدولية)، لأن الوالد الأكثر شيوعا لسلاسل en-GB هو en-001 . توضح الأمثلة التالية لماذا تؤدي هذه الممارسات إلى تحسين أداء وموثوقية حل الموارد.

أمثلة حل الموارد
مع إصدارات أندرويد أكبر من 7.0، يتم حل الحالة الموضحة في الجدول 1 بشكل مختلف:

جدول 2. إستراتيجية دقة محسنة عندما لا يكون هناك تطابق لغة محدد.
إعدادات المستخدم موارد التطبيق حل الموارد
User SettingsApp ResourcesResource Resolution
  1. fr_CH
default (en)
de_DE
es_ES
fr_FR
it_IT
Try fr_CH => Fail
Try fr => Fail
Try children of fr => fr_FR
Use fr_FR
الآن يحصل المستخدم على الموارد الفرنسية بدلا من اللغة الإنجليزية. يوضح هذا المثال أيضا لماذا يجب عليك تخزين السلاسل الفرنسية في fr بدلا من fr_FR لنظام التشغيل أندرويد 7.0 أو إصدار أحدث. هنا مسار العمل هو لمطابقة أقرب لهجة الوالدين، مما يجعل القرار بشكل أسرع وأكثر قابلية للتنبؤ.

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

الجدول 3. حل الموارد عندما التطبيق يطابق فقط الإعداد المحلي المفضل الثاني للمستخدم.
إعدادات المستخدم موارد التطبيق حل الموارد
User SettingsApp ResourcesResource Resolution
  1. fr_CH
  2. it_CH
default (en)
de_DE
es_ES
it_IT
Try fr_CH => Fail
Try fr => Fail
Try children of fr => Fail
Try it_CH => Fail
Try it => Fail
Try children of it => it_IT
Use it_IT
لا يزال المستخدم يحصل على لغة يفهمونها، على الرغم من أن التطبيق لا يدعم اللغة الفرنسية.

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

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

على سبيل المثال، يتضمن نظام أندرويد 7.0 والإصدارات الأحدث دعم 27 لغة عربية. يمكن لهذه المواقع مشاركة معظم الموارد، ولكن البعض يفضلون أرقام أسي، في حين أن البعض الآخر يفضلون الأرقام الأصلية. على سبيل المثال، عندما تريد إنشاء جملة ذات متغير أرقام، مثل "اختيار دبوس 4 أرقام"، استخدم تنسيقات كما هو موضح أدناه:


     format(locale, "Choose a %d-digit PIN", 4)






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

res/drawable/avd.xml

<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
   
android:drawable="@drawable/vectordrawable" >
   
<target
       
android:name="rotationGroup"
       
android:animation="@anim/rotation" />
</animated-vector>

res/drawable/vectordrawable.xml



<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
   
android:height="64dp"
   
android:width="64dp"
   
android:viewportHeight="600"
   
android:viewportWidth="600" >

  
<group
       
android:name="rotationGroup"
       
android:pivotX="300.0"
       
android:pivotY="300.0"
       
android:rotation="45.0" >
       
<path
           
android:fillColor="#000000"
           
android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />

  
</group>
</vector>
res/anim/rotation.xml
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/android"
   
android:duration="6000"
   
android:propertyName="rotation"
   
android:valueFrom="0"

  
android:valueTo="360" />

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

باستخدام تنسيق الموارد المضمنة آابت، يمكنك تعريف جميع الموارد الثلاثة في نفس ملف شمل. منذ نحن جعل الرسوم المتحركة ناقلات القابل للسحب، وضعنا الملف تحت res/drawable/ .

res/drawable/avd.xml


<?xml version="1.0" encoding="utf-8"?>
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:aapt="http://schemas.android.com/aapt" >

   
<aapt:attr name="android:drawable" >
       
<vector
           
android:height="64dp"
           
android:width="64dp"
           
android:viewportHeight="600"
           
android:viewportWidth="600" >

          
<group
               
android:name="rotationGroup"
               
android:pivotX="300.0"
               
android:pivotY="300.0"
               
android:rotation="45.0" >
               
<path
                   
android:fillColor="#000000"
                   
android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />

          
</group>
       
</vector>
   
</aapt:attr>

   
<target android:name="rotationGroup">
       
<aapt:attr name="android:animation" >
           
<objectAnimator
               
android:duration="6000"
               
android:propertyName="rotation"
               
android:valueFrom="0"

              
android:valueTo="360" />
       
</aapt:attr>
   
</target>
</animated-vector>
تقوم علامة شمل <aapt:attr > بأن طفل العلامة يجب أن يعامل كمصدر ويستخرج في ملف المورد الخاص به. تحدد القيمة في اسم الخاصية المميزة مكان استخدام المورد المضمنة داخل العلامة الرئيسية.

سوف تقوم آابت بإنشاء ملفات وأسماء الموارد لجميع الموارد المضمنة. التطبيقات التي تم إنشاؤها باستخدام هذا الشكل مضمنة متوافقة مع جميع إصدارات الروبوت.



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

في ما يلي ملخص مختصر لكل نوع من الموارد:

موارد الرسوم المتحركة
تحديد الرسوم المتحركة محددة مسبقا. 
يتم حفظ الرسوم المتحركة توين في res/anim/ الرسوم المتحركة res/anim/ والوصول إليها من فئة R.anim . 
يتم حفظ الرسوم المتحركة الإطار في res/drawable/ والوصول إليها من الطبقة R.drawable .
كولور ستات ليست ريسورس
حدد موارد الألوان التي تتغير استنادا إلى حالة العرض. 
المحفوظة في res/color/ والوصول إليها من فئة R.color .
الموارد القابلة للرسم
تعريف الرسومات المختلفة مع الصور النقطية أو شمل. 
المحفوظة في res/drawable/ والوصول إليها من الطبقة R.drawable .
تخطيط الموارد
حدد التخطيط لواجهة مستخدم التطبيق. 
المحفوظة في res/layout/ والوصول إليها من فئة R.layout .
مورد القائمة
تحديد محتويات القوائم التطبيق الخاص بك. 
المحفوظة في res/menu/ والوصول إليها من فئة R.menu .
الموارد سلسلة
تحديد السلاسل، صفائف سلسلة، والجمع (وتشمل تنسيق السلسلة والتصميم). 
المحفوظة في res/values/ والوصول إليها من R.string ، R.array ، و R.plurals .
نمط الموارد
حدد الشكل والشكل لعناصر واجهة المستخدم. 
المحفوظة في res/values/ والوصول إليها من فئة R.style .
موارد الخط
تحديد أسر الخط وتشمل الخطوط المخصصة في شمل. 
المحفوظة في res/font/ والوصول إليها من فئة R.font .
المزيد من أنواع الموارد
تحديد قيم مثل بوولانز، والأعداد الصحيحة، والأبعاد، والألوان، والمصفوفات الأخرى. 
المحفوظة في res/values/ ولكن كل الوصول إليها من الفصول الفرعية R فريدة من نوعها (مثل R.bool ، R.integer ، R.dimen ، الخ).






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

الرسوم المتحركة الملكية
لإنشاء رسوم متحركة عن طريق تعديل قيم خاصية عنصر ما على مدى فترة زمنية محددة مع Animator .
عرض الرسوم المتحركة
هناك نوعان من الرسوم المتحركة التي يمكنك القيام بها باستخدام إطار عرض الرسوم المتحركة:

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

مكان الملف:
res/animator/ filename .xml 
سيتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى ValueAnimator ، ObjectAnimator ، أو ObjectAnimator .
مرجع الموارد:
في جافا: R.animator. filename R.animator. filename 
في شمل: @[ package :]animator/ filename
بناء الجملة:



In Java: R.animator.filename
In XML: @[package:]animator/filename
SYNTAX:
<set
 
android:ordering=["together" | "sequentially"]>

   
<objectAnimator
       
android:propertyName="string"
       
android:duration="int"
       
android:valueFrom="float | int | color"
       
android:valueTo="float | int | color"
       
android:startOffset="int"
       
android:repeatCount="int"
       
android:repeatMode=["repeat" | "reverse"]
       
android:valueType=["intType" | "floatType"]/>

   
<animator
       
android:duration="int"
       
android:valueFrom="float | int | color"
       
android:valueTo="float | int | color"
       
android:startOffset="int"
       
android:repeatCount="int"
       
android:repeatMode=["repeat" | "reverse"]
       
android:valueType=["intType" | "floatType"]/>

   
<set>
        ...
   
</set>
</set>


يجب أن يحتوي الملف على عنصر جذر واحد: إما <objectAnimator> أو <valueAnimator> أو <valueAnimator> . يمكنك تجميع عناصر الرسوم المتحركة معا داخل العنصر <set> ، بما في ذلك العناصر <set> الأخرى.

عناصر:
<set>
حاوية تحتوي على عناصر أخرى للرسوم المتحركة ( <valueAnimator> ، أو <valueAnimator> ، أو عناصر <valueAnimator> أخرى). يمثل AnimatorSet .
يمكنك تحديد علامات <set> سيت <set> المتداخلة لزيادة تجميع الرسوم المتحركة معا. يمكن لكل <set> تحديد سمة ordering الخاصة بها.
Keyword. Specifies the play ordering of animations in this set.
ValueDescription
sequentiallyPlay animations in this set sequentially
together (default)Play animations in this set at the same time.
الصفات:

android:ordering
الكلمة الرئيسية . لتحديد ترتيب تشغيل الرسوم المتحركة في هذه المجموعة.
القيمة وصف
sequentially لعب الرسوم المتحركة في هذه المجموعة بالتتابع
together (افتراضي) لعب الرسوم المتحركة في هذه المجموعة في نفس الوقت.
<objectAnimator>
الرسوم المتحركة خاصية معينة من كائن على مدى فترة معينة من الزمن. يمثل ObjectAnimator .
الصفات:
Keyword. Do not specify this attribute if the value is a color. The animation framework automatically handles color values
ValueDescription
intTypeSpecifies that the animated values are integers
floatType (default)Specifies that the animated values are floats
android:propertyName
سلسلة . مطلوب . خاصية العنصر للتحريك، المشار إليها باسمه. على سبيل المثال يمكنك تحديد "alpha" أو "backgroundColor" لكائن عرض. لا يعرض عنصر objectAnimator سمة target ، ولكن لا يمكنك تعيين الكائن إلى تحريك في تعريف شمل. يجب تضخيم مورد شمل للرسوم المتحركة من خلال الاتصال loadAnimator() واستدعاء setTarget() لتعيين الكائن الهدف الذي يحتوي على هذه الخاصية.
android:valueTo
تعويم، إنت، أو اللون . مطلوب . القيمة التي تنتهي فيها الخاصية المتحركة. يتم تمثيل الألوان كأرقام سداسية عشرية مكونة من ستة أرقام (على سبيل المثال، # 333333).
android:valueFrom
تعويم، إنت، أو اللون . القيمة التي تبدأ فيها الخاصية المتحركة. إذا لم يتم تحديدها، تبدأ الرسوم المتحركة بالقيمة التي تم الحصول عليها بواسطة طريقة الحصول على الخاصية. يتم تمثيل الألوان كأرقام سداسية عشرية مكونة من ستة أرقام (على سبيل المثال، # 333333).
android:duration
إنت . الوقت بالمللي ثانية من الرسوم المتحركة. 300 ميلي ثانية هو الافتراضي.
android:startOffset
إنت . ويسمى مقدار مللي ثانية من التأخير الرسوم المتحركة بعد start() .
android:repeatCount
إنت . كم عدد المرات لتكرار الرسوم المتحركة. تعيين إلى "-1" لتكرار بلا حدود أو إلى عدد صحيح موجب. على سبيل المثال، قيمة "1" تعني أن الرسوم المتحركة تتكرر مرة واحدة بعد التشغيل الأولي للرسوم المتحركة، وبالتالي فإن الرسوم المتحركة تلعب ما مجموعه مرتين. القيمة الافتراضية هي "0" ، مما يعني عدم التكرار.
android:repeatMode
إنت . كيف تتصرف الرسوم المتحركة عندما تصل إلى نهاية الرسوم المتحركة. android:repeatCount يجب تعيين android:repeatCount إلى عدد صحيح موجب أو "-1" لهذه السمة أن يكون لها تأثير. تعيين إلى "reverse" أن يكون الاتجاه عكس الحركة مع كل تكرار أو "repeat" أن يكون حلقة الرسوم المتحركة من البداية في كل مرة.
android:valueType
الكلمة الرئيسية . لا تحدد هذه السمة إذا كانت القيمة لونا. يعالج إطار الرسوم المتحركة قيم الألوان تلقائيا
القيمة وصف
intType لتحديد أن القيم المتحركة هي أعداد صحيحة
floatType (افتراضي) لتحديد أن القيم المتحركة تطفو
<animator>
يؤدي الرسوم المتحركة على مدى فترة زمنية محددة. يمثل ValueAnimator .
الصفات:
ValueDescription
intTypeSpecifies that the animated values are integers
floatType (default)Specifies that the animated values are floats
android:valueTo
تعويم، إنت، أو اللون . مطلوب . القيمة التي تنتهي فيها الرسوم المتحركة. يتم تمثيل الألوان كأرقام سداسية عشرية مكونة من ستة أرقام (على سبيل المثال، # 333333).
android:valueFrom
تعويم، إنت، أو اللون . مطلوب . القيمة التي تبدأ فيها الرسوم المتحركة. يتم تمثيل الألوان كأرقام سداسية عشرية مكونة من ستة أرقام (على سبيل المثال، # 333333).
android:duration
إنت . الوقت بالمللي ثانية من الرسوم المتحركة. 300ms هو الافتراضي.
android:startOffset
إنت . ويسمى مقدار مللي ثانية من التأخير الرسوم المتحركة بعد start() .
android:repeatCount
إنت . كم عدد المرات لتكرار الرسوم المتحركة. تعيين إلى "-1" لتكرار بلا حدود أو إلى عدد صحيح موجب. على سبيل المثال، قيمة "1" تعني أن الرسوم المتحركة تتكرر مرة واحدة بعد التشغيل الأولي للرسوم المتحركة، وبالتالي فإن الرسوم المتحركة تلعب ما مجموعه مرتين. القيمة الافتراضية هي "0" ، مما يعني عدم التكرار.
android:repeatMode
إنت . كيف تتصرف الرسوم المتحركة عندما تصل إلى نهاية الرسوم المتحركة. android:repeatCount يجب تعيين android:repeatCount إلى عدد صحيح موجب أو "-1" لهذه السمة أن يكون لها تأثير. تعيين إلى "reverse" أن يكون الاتجاه عكس الحركة مع كل تكرار أو "repeat" أن يكون حلقة الرسوم المتحركة من البداية في كل مرة.
android:valueType
الكلمة الرئيسية . لا تحدد هذه السمة إذا كانت القيمة لونا. يعالج إطار الرسوم المتحركة قيم الألوان تلقائيا.
القيمة وصف
intType لتحديد أن القيم المتحركة هي أعداد صحيحة
floatType (افتراضي) لتحديد أن القيم المتحركة تطفو
مثال:
ملف شمل المحفوظ في res/animator/property_animator.xml :



EXAMPLE:
XML file saved at res/animator/property_animator.xml:
<set android:ordering="sequentially">
   
<set>
       
<objectAnimator
           
android:propertyName="x"
           
android:duration="500"
           
android:valueTo="400"
           
android:valueType="intType"/>
       
<objectAnimator
           
android:propertyName="y"
           
android:duration="500"
           
android:valueTo="300"
           
android:valueType="intType"/>
   
</set>
   
<objectAnimator
       
android:propertyName="alpha"
       
android:duration="500"
       
android:valueTo="1f"/>
</set>
لتشغيل هذه الرسوم المتحركة، يجب تضخيم موارد شمل في التعليمات البرمجية إلى كائن AnimatorSet ثم قم بتعيين الكائنات الهدف لجميع الرسوم المتحركة قبل بدء مجموعة الرسوم المتحركة. استدعاء setTarget() يحدد كائن الهدف واحد لجميع الأطفال من setTarget() . توضح التعليمات البرمجية التالية كيفية القيام بذلك:


AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R
.anim.property_animator);
set.setTarget(myObject);
set.start();
أنظر أيضا:
الرسوم المتحركة الملكية
أبي العروض التوضيحية للحصول على أمثلة حول كيفية استخدام نظام الرسوم المتحركة الملكية.
عرض الرسوم المتحركة
إطار الرسوم المتحركة عرض يدعم كلا توين والإطار من قبل الرسوم المتحركة الإطار، والتي يمكن أن تكون على حد سواء أعلن في شمل. تصف الأقسام التالية كيفية استخدام كلا الطريقتين.
توين الرسوم المتحركة
الرسوم المتحركة المعرفة في شمل التي تؤدي التحولات مثل الدورية، يتلاشى، والانتقال، وتمتد على الرسم.

مكان الملف:
res/anim/ filename .xml 
سيتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى Animation .
مرجع الموارد:
في جافا: R.anim. filename R.anim. filename 
في شمل: @[ package :]anim/ filename
بناء الجملة:


SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
   
android:interpolator="@[package:]anim/interpolator_resource"
   
android:shareInterpolator=["true" | "false"] >
   
<alpha
       
android:fromAlpha="float"
       
android:toAlpha="float" />
   
<scale
       
android:fromXScale="float"
       
android:toXScale="float"
       
android:fromYScale="float"
       
android:toYScale="float"
       
android:pivotX="float"
       
android:pivotY="float" />
   
<translate
       
android:fromXDelta="float"
       
android:toXDelta="float"
       
android:fromYDelta="float"
       
android:toYDelta="float" />
   
<rotate
       
android:fromDegrees="float"
       
android:toDegrees="float"
       
android:pivotX="float"
       
android:pivotY="float" />
   
<set>
        ...
   
</set>
</set>
يجب أن يحتوي الملف على عنصر جذر واحد: عنصر <alpha> أو <scale> أو <translate> أو <rotate> أو <set> يحمل مجموعة (أو مجموعات) لعناصر الرسوم المتحركة الأخرى (حتى متداخلة <set> سيت <set> عناصر).

عناصر:
<set>
حاوية تحتوي على عناصر أخرى للرسوم المتحركة ( <alpha> أو <scale> أو <translate> أو <rotate> ) أو عناصر <rotate> أخرى. يمثل AnimationSet .
الصفات:

android:interpolator
مورد الاستكمال الداخلي . Interpolator لتطبيق على الرسوم المتحركة. يجب أن تكون القيمة مرجعا لمورد يحدد إنتيربولاتور (وليس اسم فئة إنتيربولاتور). هناك موارد إنتيربولاتور افتراضية متاحة من النظام الأساسي أو يمكنك إنشاء مورد إنتيربولاتور الخاص بك. انظر المناقشة أدناه لمعرفة المزيد عن المحكمين الداخليين .
android:shareInterpolator
منطقي . "صحيح" إذا كنت ترغب في مشاركة إنتيربولاتور نفسه بين جميع العناصر الطفل.
<alpha>
الرسوم المتحركة تتلاشى أو تتلاشى التدريجي. يمثل AlphaAnimation .
الصفات:

android:fromAlpha
تعويم . بدءا إزاحة التعتيم، حيث 0.0 شفافة و 1.0 غير شفافة.
android:toAlpha
تعويم . إنهاء تعويض التعتيم، حيث 0.0 شفافة و 1.0 غير شفافة.
للحصول على المزيد من السمات التي يدعمها <alpha> ، راجع مرجع فئة Animation (الذي يتم ترث جميع سمات شمل بواسطة هذا العنصر).

<scale>
تغيير حجم الرسوم المتحركة. يمكنك تحديد النقطة المركزية للصورة التي تنمو من الخارج (أو الداخل) من خلال تحديد pivotX و pivotY . على سبيل المثال، إذا كانت هذه القيم 0، 0 (الزاوية العلوية اليسرى)، فإن كل النمو سيكون أسفل وإلى اليمين. يمثل ScaleAnimation .
الصفات:

android:fromXScale
تعويم . بدءا X حجم الإزاحة، حيث 1.0 لا تغيير.
android:toXScale
تعويم . إنهاء إزاحة حجم X، حيث 1.0 لا تغيير.
android:fromYScale
تعويم . بدءا من إزاحة حجم Y، حيث 1.0 لا تغيير.
android:toYScale
تعويم . في نهاية Y إزاحة الحجم، حيث 1.0 لا تغيير.
android:pivotX
تعويم . تنسيق X تبقى ثابتة عندما يتم تحجيم الكائن.
android:pivotY
تعويم . تنسيق Y لتبقى ثابتة عندما يتم تحجيم الكائن.
للحصول على مزيد من السمات التي يدعمها <scale> سكيل <scale> ، راجع مرجع فئة Animation (الذي يتم ترميز جميع سمات شمل بواسطة هذا العنصر).

<translate>
حركة عمودية و / أو أفقية. يدعم السمات التالية بأي من التنسيقات الثلاثة التالية: القيم من 100 إلى 100 تنتهي ب "٪"، مع الإشارة إلى نسبة مئوية لها؛ القيم من 100 إلى 100 تنتهي ب "٪ p"، مما يشير إلى نسبة مئوية بالنسبة إلى الأصل؛ قيمة تعويم بدون لاحقة، تشير إلى قيمة مطلقة. يمثل TranslateAnimation .
الصفات:

android:fromXDelta
تعويم أو نسبة مئوية . بدء الإزاحة X. يعبر عن إما: بالبكسل بالنسبة إلى الموضع العادي (مثل "5" )، أو بالنسبة المئوية بالنسبة إلى عرض العنصر (مثل "5%" )، أو بنسبة مئوية بالنسبة إلى العرض الأصلي (مثل "5%p" ).
android:toXDelta
تعويم أو نسبة مئوية . إنهاء الإزاحة X. يعبر عن إما: بالبكسل بالنسبة إلى الموضع العادي (مثل "5" )، أو بالنسبة المئوية بالنسبة إلى عرض العنصر (مثل "5%" )، أو بنسبة مئوية بالنسبة إلى العرض الأصلي (مثل "5%p" ).
android:fromYDelta
تعويم أو نسبة مئوية . بدء Y الإزاحة. يعبر عن إما: بالبكسل بالنسبة إلى الوضع الطبيعي (مثل "5" )، أو بالنسبة المئوية بالنسبة إلى ارتفاع العنصر (مثل "5%" )، أو بالنسبة المئوية بالنسبة إلى الارتفاع الأصلي (مثل "5%p" ).
android:toYDelta
تعويم أو نسبة مئوية . إنهاء Y الإزاحة. يعبر عن إما: بالبكسل بالنسبة إلى الوضع الطبيعي (مثل "5" )، أو بالنسبة المئوية بالنسبة إلى ارتفاع العنصر (مثل "5%" )، أو بالنسبة المئوية بالنسبة إلى الارتفاع الأصلي (مثل "5%p" ).
للحصول على مزيد من السمات التي تدعمها <translate> ، راجع مرجع فئة Animation (الذي يتم ترث جميع سمات شمل بواسطة هذا العنصر).

<rotate>
الرسوم المتحركة التناوب. يمثل RotateAnimation .
الصفات:

android:fromDegrees
تعويم . بدء موقف الزاوي، في درجة.
android:toDegrees
تعويم . إنهاء الموقف الزاوي، في درجة.
android:pivotX
تعويم أو نسبة مئوية . تنسيق X من مركز الدوران. يعبر عن إما: بالبكسل بالنسبة إلى الحافة اليسرى للكائن (مثل "5" )، أو بالنسبة المئوية بالنسبة إلى الحافة اليسرى للكائن (مثل "5%" )، أو بنسبة مئوية بالنسبة إلى الحافة اليسرى للحاوية الرئيسية (مثل "5%p" ).
android:pivotY
تعويم أو نسبة مئوية . تنسيق Y من مركز الدوران. يعبر عن إما: بالبكسل بالنسبة إلى الحافة العلوية للكائن (مثل "5" )، أو بالنسبة المئوية بالنسبة إلى الحافة العلوية للكائن (مثل "5%" )، أو بنسبة مئوية بالنسبة إلى الحافة العلوية للحاوية الرئيسية (مثل "5%p" ).
للحصول على المزيد من السمات التي يدعمها <rotate> ، راجع مرجع فئة Animation (الذي يتم ترميز جميع سمات شمل بواسطة هذا العنصر).

مثال:
ملف شمل المحفوظ في res/anim/hyperspace_jump.xml :



EXAMPLE:
XML file saved at res/anim/hyperspace_jump.xml:
<set xmlns:android="http://schemas.android.com/apk/res/android"
   
android:shareInterpolator="false">
   
<scale
       
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
       
android:fromXScale="1.0"
       
android:toXScale="1.4"
       
android:fromYScale="1.0"
       
android:toYScale="0.6"
       
android:pivotX="50%"
       
android:pivotY="50%"
       
android:fillAfter="false"
       
android:duration="700" />
   
<set
       
android:interpolator="@android:anim/accelerate_interpolator"
       
android:startOffset="700">
       
<scale
           
android:fromXScale="1.4"
           
android:toXScale="0.0"
           
android:fromYScale="0.6"
           
android:toYScale="0.0"
           
android:pivotX="50%"
           
android:pivotY="50%"
           
android:duration="400" />
       
<rotate
           
android:fromDegrees="0"
           
android:toDegrees="-45"
           
android:toYScale="0.0"
           
android:pivotX="50%"
           
android:pivotY="50%"
           
android:duration="400" />
   
</set>
</set>

سوف تطبيق هذا الرمز تطبيق الرسوم المتحركة إلى ImageView وبدء الرسوم المتحركة:



ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image
.startAnimation(hyperspaceJump);


أنظر أيضا:
2D الرسومات: توين الرسوم المتحركة
Interpolators
المحرف هو معدل الرسوم المتحركة المحدد في شمل الذي يؤثر على معدل التغيير في الرسوم المتحركة. ويتيح هذا إمكانية تسريع تأثيرات الرسوم المتحركة الحالية وإبطاءها وتكرارها وارتدادها وما إلى ذلك.

يتم تطبيق إنتيربولاتور على عنصر الرسوم المتحركة مع android:interpolator السمة android:interpolator ، والقيمة التي هي مرجع لمصدر إنتيربولاتور.

جميع المحاور المتاحة في الروبوت هي فئات فرعية من فئة Interpolator . لكل فئة إنتيربولاتور، يتضمن الروبوت مورد عام يمكنك الرجوع من أجل تطبيق إنتيربولاتور إلى الرسوم المتحركة باستخدام android:interpolator السمة android:interpolator . يحدد الجدول التالي المورد المطلوب استخدامه لكل إنتيربولاتور:

فئة إنتيربولاتور معرف المورد
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator
وإليك كيف يمكنك تطبيق واحد من هذه مع android:interpolator السمة android:interpolator :



<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>
إنتيربولاتورس مخصصة
إذا لم تكن راضيا عن المحارف الداخلية التي توفرها المنصة (المدرجة في الجدول أعلاه)، فيمكنك إنشاء مورد مخصص داخلي مع سمات معدلة. على سبيل المثال، يمكنك ضبط معدل التسارع ل CycleInterpolator ، أو ضبط عدد دورات CycleInterpolator . من أجل القيام بذلك، تحتاج إلى إنشاء المورد إنتيربولاتور الخاصة بك في ملف شمل.

مكان الملف:
res/anim/ filename .xml 
سيتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى كائن إنتيربولاتور المقابل.
مرجع الموارد:
في شمل: @[ package :]anim/ filename
بناء الجملة:


SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
   
android:attribute_name="value"
   
/>


إذا لم تقم بتطبيق أي سمات، فسيعمل المحاكي الخاص بك تماما بنفس الوظائف التي توفرها المنصة (المدرجة في الجدول أعلاه).

عناصر:
لاحظ أن كل تطبيق Interpolator ، عند تعريفه في شمل، يبدأ اسمه في أحرف صغيرة.
<accelerateDecelerateInterpolator>
معدل التغيير يبدأ وينتهي ببطء ولكن يتسارع من خلال الوسط.
لا توجد سمات.

<accelerateInterpolator>
معدل التغيير يبدأ ببطء، ثم يتسارع.
الصفات:

android:factor
تعويم . معدل التسارع (الافتراضي هو 1).
<anticipateInterpolator>
يبدأ التغيير إلى الوراء ثم يطير إلى الأمام.
الصفات:

android:tension
تعويم . مقدار التوتر لتطبيق (الافتراضي هو 2).
<anticipateOvershootInterpolator>
يبدأ التغيير إلى الوراء، فلينغس إلى الأمام و أوفيرشوتس القيمة المستهدفة، ثم يستقر في القيمة النهائية.
الصفات:

android:tension
تعويم . مقدار التوتر لتطبيق (الافتراضي هو 2).
android:extraTension
تعويم . المبلغ الذي من أجل مضاعفة التوتر (الافتراضي هو 1.5).
<bounceInterpolator>
التغيير مستبعد في نهاية المطاف.
لا توجد سمات

<cycleInterpolator>
كرر الرسوم المتحركة لعدد محدد من الدورات. معدل التغيير يتبع النمط الجيبية.
الصفات:

android:cycles
عدد صحيح . عدد الدورات (الافتراضي هو 1).
<decelerateInterpolator>
يبدأ معدل التغيير بسرعة، ثم يتباطأ.
الصفات:

android:factor
تعويم . معدل التباطؤ (الافتراضي هو 1).
<linearInterpolator>
معدل التغير ثابت.
لا توجد سمات.

<overshootInterpolator>
تغيرات القذف إلى الأمام وتجاوز القيمة الأخيرة، ثم يعود.
الصفات:

android:tension
تعويم . مقدار التوتر لتطبيق (الافتراضي هو 2).
مثال:
ملف شمل المحفوظ في res/anim/my_overshoot_interpolator.xml :


EXAMPLE:
XML file saved at res/anim/my_overshoot_interpolator.xml:
<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
   
android:tension="7.0"
   
/>
سيتم تطبيق هذه الرسوم المتحركة شمل المحرف:

r:
<scale xmlns:android="http://schemas.android.com/apk/res/android"
   
android:interpolator="@anim/my_overshoot_interpolator"
   
android:fromXScale="1.0"
   
android:toXScale="3.0"
   
android:fromYScale="1.0"
   
android:toYScale="3.0"
   
android:pivotX="50%"
   
android:pivotY="50%"
   
android:duration="700" />

Frame animation

إطار الرسوم المتحركة
الرسوم المتحركة المعرفة في شمل التي تظهر سلسلة من الصور في النظام (مثل فيلم).

مكان الملف:
res/drawable/ filename .xml 
سيتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى AnimationDrawable .
مرجع الموارد:
في جافا: R.drawable. filename R.drawable. filename 
في شمل: @[ package :]drawable. filename @[ package :]drawable. filename
بناء الجملة:


<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
   
android:oneshot=["true" | "false"] >
   
<item
       
android:drawable="@[package:]drawable/drawable_resource_name"
       
android:duration="integer" />
</animation-list>

عناصر:
<animation-list>
مطلوب . يجب أن يكون هذا العنصر الجذر. يحتوي على عنصر واحد أو أكثر من العناصر <item> .
الصفات:

android:oneshot
منطقي . "صحيح" إذا كنت ترغب في تنفيذ الرسوم المتحركة مرة واحدة. "كاذبة" لحلقة الرسوم المتحركة.
<item>
إطار واحد من الرسوم المتحركة. يجب أن يكون طفلا لعنصر <animation-list> .
الصفات:

android:drawable
مورد دراوابل . قابل للرسم للاستخدام لهذا الإطار.
android:duration
عدد صحيح . المدة لعرض هذا الإطار، بالمللي ثانية.
مثال:
ملف شمل المحفوظ في res/anim/rocket.xml :



EXAMPLE:
XML file saved at res/anim/rocket.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
   
android:oneshot="false">
   
<item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
   
<item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
   
<item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>
سوف رمز التطبيق هذا تعيين الرسوم المتحركة كخلفية للعرض، ثم تلعب الرسوم المتحركة:
n:
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage
.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation
= (AnimationDrawable) rocketImage.getBackground();
rocketAnimation
.start();
أنظر أيضا:
2D الرسومات: إطار الرسوم المتحركة
-----------------------------




كولور ستات ليست ريسورس
أنظر أيضا
اللون (قيمة بسيطة)



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

يمكنك وصف قائمة الحالة في ملف شمل. يتم تعريف كل لون في عنصر <selector> داخل عنصر <selector> واحد. كل <item> يستخدم سمات مختلفة لوصف الحالة التي يجب استخدامها.

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

ملاحظة: إذا كنت تريد توفير مورد لون ثابت، فاستخدم قيمة كولور بسيطة.

مكان الملف:
res/color/ filename .xml 
سيتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى ColorStateList .
مرجع الموارد:
في جافا: R.color. filename R.color. filename 
في شمل: @[ package :]color/ filename
بناء الجملة:


SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
   
<item
       
android:color="hex_color"
       
android:state_pressed=["true" | "false"]
       
android:state_focused=["true" | "false"]
       
android:state_selected=["true" | "false"]
       
android:state_checkable=["true" | "false"]
       
android:state_checked=["true" | "false"]
       
android:state_enabled=["true" | "false"]
       
android:state_window_focused=["true" | "false"] />
</selector>
عناصر:
<selector>
مطلوب. يجب أن يكون هذا العنصر الجذر. يحتوي على عنصر واحد أو أكثر من العناصر <item> .
الصفات:

xmlns:android
سلسلة . مطلوب. يحدد مساحة اسم شمل، والتي يجب أن تكون "http://schemas.android.com/apk/res/android" .
<item>
يحدد لونا لاستخدامه خلال حالات معينة، كما هو موضح من قبل خصائصه. يجب أن يكون طفلا لعنصر <selector> .
الصفات:

android:color
هيكساديكسيمال اللون . مطلوب . يتم تحديد اللون بقيمة رغب وقناة ألفا اختيارية.
تبدأ القيمة دائما بحرف جنيه (#) ثم متبوعة بالمعلومات ألفا-ريد-غرين-بلو بأحد التنسيقات التالية:

# رغب
# أرجب
# رغغب
# أرجب
android:state_pressed
منطقي . "صحيح" إذا كان ينبغي استخدام هذا البند عند الضغط على الكائن (مثل عندما يتم لمس زر / النقر)؛ "فالس" إذا كان يجب استخدام هذا العنصر في الحالة الافتراضية غير المضغوطة.
android:state_focused
منطقي . "صحيح" إذا كان ينبغي استخدام هذا البند عندما يتم تركيز الكائن (مثل عندما يتم تمييز زر باستخدام كرة التتبع / د)؛ "كاذبة" إذا كان يجب استخدام هذا العنصر في الحالة الافتراضية غير المركزة.
android:state_selected
منطقي . "صحيح" إذا كان يجب استخدام هذا العنصر عند تحديد الكائن (مثل عند فتح علامة تبويب)؛ "كاذبة" إذا كان يجب استخدام هذا العنصر عند عدم تحديد الكائن.
android:state_checkable
منطقي . "صحيح" إذا كان ينبغي استخدام هذا البند عندما يكون الكائن قابل للتحقق؛ "كاذبة" إذا كان يجب استخدام هذا العنصر عندما يكون الكائن غير قابل للتحقق. (يكون مفيدا فقط إذا كان الكائن يمكنه الانتقال بين أداة يمكن التحقق منها وغير قابلة للتحقق.)
android:state_checked
منطقي . "صحيح" إذا كان ينبغي استخدام هذا البند عند فحص الكائن؛ "كاذبة" إذا كان ينبغي استخدامها عند إلغاء تحديد الكائن.
android:state_enabled
منطقي . "صحيح" إذا كان ينبغي استخدام هذا العنصر عند تمكين الكائن (قادرة على تلقي أحداث اللمس / النقر). "كاذبة" إذا كان يجب استخدامها عند تعطيل الكائن.
android:state_window_focused
منطقي . "صحيح" إذا كان ينبغي استخدام هذا البند عند التركيز على إطار التطبيق (التطبيق في المقدمة)، "فالس" إذا كان يجب استخدام هذا البند عندما لا يكون إطار التطبيق التركيز (على سبيل المثال، إذا كان الإعلام الظل هو سحبت أو يظهر مربع حوار).
ملاحظة: تذكر أنه سيتم تطبيق العنصر الأول في قائمة الحالة الذي يطابق الحالة الحالية للكائن. حتى إذا كان العنصر الأول في القائمة يحتوي على أي من سمات الدولة أعلاه، ثم سيتم تطبيقه في كل مرة، وهذا هو السبب يجب أن تكون القيمة الافتراضية الخاصة بك دائما الماضي، كما هو موضح في المثال التالي.

مثال:
ملف شمل محفوظ في res/color/button_text.xml :


EXAMPLE:
XML file saved at res/color/button_text.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
   
<item android:state_pressed="true"
         
android:color="#ffff0000"/> <!-- pressed -->
   
<item android:state_focused="true"
         
android:color="#ff0000ff"/> <!-- focused -->
   
<item android:color="#ff000000"/> <!-- default -->
</selector>
سيعمل تنسيق شمل هذا على تطبيق قائمة الألوان على طريقة العرض:


<Button
   
android:layout_width="fill_parent"
   
android:layout_height="wrap_content"
   
android:text="@string/button_text"
   
android:textColor="@color/button_text" />

أنظر أيضا:
اللون (قيمة بسيطة)
ColorStateList
قائمة الدولة دراوابل



















الموارد القابلة للرسم
أنظر أيضا
2D الرسومات
سهم التوجيه، أسيت، ستوديو






المورد getDrawable(int)

 هو مفهوم عام للرسم الذي يمكن استخلاصه إلى الشاشة والتي يمكنك استرداد مع واجهات برمجة التطبيقات مثل getDrawable(int) أو تنطبق على مورد شمل آخر مع سمات مثل android:drawable android:icon . هناك عدة أنواع مختلفة من المسحات:

ملف صورة نقطية
ملف رسوم نقطية ( .png أو .jpg أو .gif ). لإنشاء BitmapDrawable .
تسعة التصحيح الملف
ملف ينغ مع مناطق قابلة للتمديد لتغيير حجم الصورة استنادا إلى المحتوى ( .9.png ). لإنشاء NinePatchDrawable .
قائمة الطبقات
A دراوابل التي تدير مجموعة من دراوابلز أخرى. يتم رسمها في ترتيب صفيف، لذلك يتم رسم العنصر مع أكبر مؤشر على القمة. لإنشاء LayerDrawable .
قائمة الدولة
ملف شمل يشير إلى رسومات صور نقطية مختلفة لحالات مختلفة (على سبيل المثال، لاستخدام صورة مختلفة عند الضغط على زر). لإنشاء StateListDrawable .
قائمة المستوى
ملف شمل الذي يحدد دراوابل الذي يدير عددا من دراوابلز بديلة، كل تعيين قيمة العددية القصوى. لإنشاء LevelListDrawable .
الانتقال دراوابل
ملف شمل يحدد دروابل يمكن أن يتلاشى بين مصدرين قابلين للرسم. لإنشاء TransitionDrawable .
انسيت دراوابل
ملف شمل يحدد دروباابل يقوم بإدراج رسم آخر بمسافة محددة. هذا مفيد عندما يحتاج عرض دروبل الخلفية التي هي أصغر من الحدود الفعلية فيو.
كليب دراوابل
ملف شمل يحدد دروابل يقوم بتقطيع دراوابل آخر استنادا إلى قيمة المستوى الحالي دراوابل. لإنشاء ClipDrawable .
مقياس دراوابل
ملف شمل يقوم بتعريف رسم قابل لتغيير حجم دراوابل آخر استنادا إلى قيمته الحالية. لإنشاء ScaleDrawable
شكل دراوابل
ملف شمل يحدد شكل هندسي، بما في ذلك الألوان والتدرجات. لإنشاء ShapeDrawable .
راجع أيضا وثيقة الموارد المتحركة لكيفية إنشاء AnimationDrawable .

ملاحظة: يمكن أيضا استخدام مورد الألوان كدرابل في شمل. على سبيل المثال، عند إنشاء قائمة الدولة دراوابل ، يمكنك الرجوع إلى مورد اللون android:drawable السمة android:drawable ( android:drawable="@color/green" ).

نقطية
صورة نقطية. يدعم أندرويد ملفات الصور النقطية في ثلاثة أشكال: .png ( .png )، .jpg (أسبتابل)، .gif (ديسوريداتد).

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

ملاحظة: ملفات الصورة النقطية قد يكون الأمثل تلقائيا مع ضغط صورة ضياع بواسطة أداة aapt أثناء عملية البناء. على سبيل المثال، قد يتم تحويل ينغ اللون الحقيقي الذي لا يتطلب أكثر من 256 لونا إلى ينغ 8 بت مع لوحة الألوان. وهذا سيؤدي إلى صورة ذات جودة متساوية ولكن الأمر يتطلب ذاكرة أقل. لذا كن على علم بأن الثنائيات الصورة الموضوعة في هذا الدليل يمكن أن تتغير أثناء الإنشاء. إذا كنت تخطط لقراءة صورة كما تيار قليلا من أجل تحويلها إلى صورة نقطية، ووضع الصور الخاصة بك في res/raw/ المجلد بدلا من ذلك، حيث أنها لن تكون الأمثل.

ملف صورة نقطية
ملف الصورة النقطية هو ملف .png أو .jpg أو .gif . الروبوت بإنشاء مورد Drawable لأي من هذه الملفات عند حفظها في res/drawable/ الدليل.

مكان الملف:
res/drawable/ filename .png ( .png ، .jpg ، أو .gif ) 
يتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى BitmapDrawable .
مرجع الموارد:
في جافا: R.drawable. filename R.drawable. filename 
في شمل: @[ package :]drawable/ filename
مثال:
مع حفظ الصورة في res/drawable/myimage.png ، هذا شمل تنسيق تطبيق الصورة إلى عرض:



EXAMPLE:
With an image saved at res/drawable/myimage.png, this layout XML applies the image to a View:
<ImageView
   
android:layout_height="wrap_content"
   
android:layout_width="wrap_content"
   
android:src="@drawable/myimage" />
 eيقوم رمز التطبيق التالي باسترداد الصورة ك Drawable :

:
Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);

أنظر أيضا:
2D الرسومات
BitmapDrawable
شمل بيتماب
صورة نقطية شمل هي مورد محدد في شمل يشير إلى ملف صورة نقطية. التأثير هو اسم مستعار لملف صورة نقطية خام. يمكن ل شمل تحديد خصائص إضافية للنقطية مثل التدرج والبلاط.

ملاحظة: يمكنك استخدام عنصر <bitmap> كطفل من عنصر <item> . على سبيل المثال، عند إنشاء قائمة حالة أو قائمة طبقات ، يمكنك استبعاد السمة android:drawable من عنصر <bitmap> داخله الذي يحدد العنصر القابل للرسم.

مكان الملف:
res/drawable/ filename .xml 
يتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى BitmapDrawable .
مرجع الموارد:
في جافا: R.drawable. filename R.drawable. filename 
في شمل: @[ package :]drawable/ filename
بناء الجملة:

<?xml version="1.0" encoding="utf-8"?>
<bitmap
   
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:src="@[package:]drawable/drawable_resource"
   
android:antialias=["true" | "false"]
   
android:dither=["true" | "false"]
   
android:filter=["true" | "false"]
   
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
                     
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
                     
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
   
android:mipMap=["true" | "false"]
   
android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />


عناصر:
<bitmap>
يحدد مصدر الصورة النقطية وخصائصه.
الصفات:

xmlns:android
سلسلة . يحدد مساحة اسم شمل، والتي يجب أن تكون "http://schemas.android.com/apk/res/android" . وهذا مطلوب فقط إذا كان <bitmap> هو العنصر الجذر - فإنه ليس مطلوبا عند تداخل <bitmap> داخل <item> .
android:src
مورد دراوابل . مطلوب . الإشارة إلى مورد قابل للرسم.
android:antialias
منطقي . تمكين أو تعطيل أنتيالياسينغ.
android:dither
منطقي . تمكين أو تعطيل تدرج الصورة النقطية إذا لم يكن لدى الصورة النقطية نفس التكوين البكسل كالشاشة (على سبيل المثال: صورة نقطية أرجب 8888 مع شاشة رغب 565).
android:filter
منطقي . لتمكين أو تعطيل تصفية الصور النقطية. يتم استخدام التصفية عندما تقلصت الصورة النقطية أو تمتد لتشمل مظهرها.
android:gravity
الكلمة الرئيسية . يحدد خطورة الصورة النقطية. تشير الجاذبية إلى مكان وضع الدرج في حاوته إذا كانت الصورة النقطية أصغر من الحاوية.
يجب أن تكون واحدة أو أكثر (مفصولة ب '|') للقيم الثابتة التالية:
ValueDescription
topPut the object at the top of its container, not changing its size.
bottomPut the object at the bottom of its container, not changing its size.
leftPut the object at the left edge of its container, not changing its size.
rightPut the object at the right edge of its container, not changing its size.
center_verticalPlace object in the vertical center of its container, not changing its size.
fill_verticalGrow the vertical size of the object if needed so it completely fills its container.
center_horizontalPlace object in the horizontal center of its container, not changing its size.
fill_horizontalGrow the horizontal size of the object if needed so it completely fills its container.
centerPlace the object in the center of its container in both the vertical and horizontal axis, not changing its size.
fillGrow the horizontal and vertical size of the object if needed so it completely fills its container. This is the default.
clip_verticalAdditional option that can be set to have the top and/or bottom edges of the child clipped to its container's bounds. The clip is based on the vertical gravity: a top gravity clips the bottom edge, a bottom gravity clips the top edge, and neither clips both edges.
clip_horizontalAdditional option that can be set to have the left and/or right edges of the child clipped to its container's bounds. The clip is based on the horizontal gravity: a left gravity clips the right edge, a right gravity clips the left edge, and neither clips both edges.



القيمة وصف
top وضع الكائن في الجزء العلوي من حاوية، وليس تغيير حجمه.
bottom وضع الكائن في الجزء السفلي من حاوية، وليس تغيير حجمه.
left وضع الكائن على الحافة اليسرى من حاوية، لا تغيير حجمه.
right وضع الكائن على الحافة اليمنى من حاوته، وليس تغيير حجمه.
center_vertical مكان الكائن في مركز عمودي من حاوية، وليس تغيير حجمه.
fill_vertical تنمو الحجم الرأسي للكائن إذا لزم الأمر بحيث يملأ تماما حاوته.
center_horizontal مكان الكائن في مركز أفقي من حاوته، وليس تغيير حجمه.
fill_horizontal تنمو الحجم الأفقي للكائن إذا لزم الأمر بحيث يملأ تماما حاوته.
center وضع الكائن في وسط حاوته في كل من المحور الرأسي والأفقي، وليس تغيير حجمه.
fill تنمو الحجم الأفقي والرأسي للكائن إذا لزم الأمر بحيث يملأ تماما حاوته. هذا هو الإعداد الافتراضي.
clip_vertical خيار إضافي يمكن ضبطه بحيث يكون الجزء العلوي و / أو السفلي من حواف الطفل مقصورا على حدود حاوته. ويستند مقطع على الجاذبية العمودية: مقاطع الجاذبية الأعلى الحافة السفلية، مقاطع الجاذبية أسفل الحافة العلوية، ولا مقاطع كلا الحواف.
clip_horizontal خيار إضافي يمكن تعيينه بحيث يكون الطرفان الأيسر و / أو الأيمن من الطفل مقيدين بحدود حاوته. ويستند مقطع على الجاذبية الأفقية: مقاطع الجاذبية الأيسر الحافة اليمنى، مقاطع الجاذبية الحق في الحافة اليسرى، ولا مقاطع كلا الحواف.
android:mipMap
منطقي . لتمكين أو تعطيل تلميح ميبماب. انظر setHasMipMap() لمزيد من المعلومات. القيمة الافتراضية هي فالس.
android:tileMode
الكلمة الرئيسية . يحدد وضع البلاط. عند تمكين وضع البلاط، يتم تكرار الصورة النقطية. يتم تجاهل الجاذبية عندما يتم تمكين وضع البلاط.
يجب أن تكون واحدة من القيم الثابتة التالية:



القيمة وصف
disabled لا تلصق الصورة النقطية. هذه هي القيمة الافتراضية.
clamp يكرر لون الحافة إذا كان التظليل يرسم خارج حدوده الأصلية
repeat يكرر صورة تظليل أفقيا وعموديا.
mirror يكرر صورة تظليل أفقيا وعموديا، بالتناوب الصور مرآة بحيث الصور المجاورة التماس دائما.
مثال:


ValueDescription
disabledDo not tile the bitmap. This is the default value.
clampReplicates the edge color if the shader draws outside of its original bounds
repeatRepeats the shader's image horizontally and vertically.
mirrorRepeats the shader's image horizontally and vertically, alternating mirror images so that adjacent images always seam.
EXAMPLE:
<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
   
android:src="@drawable/icon"
   
android:tileMode="repeat" />

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

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

للحصول على مناقشة كاملة حول كيفية إنشاء ملف تسعة-باتش مع مناطق قابلة للتمديد، راجع وثيقة الرسومات 2D .

تسعة التصحيح الملف
مكان الملف:
res/drawable/ filename .9.png 
يتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى NinePatchDrawable .
مرجع الموارد:
في جافا: R.drawable. filename R.drawable. filename 
في شمل: @[ package :]drawable/ filename
مثال:
مع حفظ الصورة في res/drawable/myninepatch.9.png ، هذا شمل شمل تخطيط تسعة التصحيح إلى عرض:

<Button
   
android:layout_height="wrap_content"
   
android:layout_width="wrap_content"
   
android:background="@drawable/myninepatch" />
أنظر أيضا:
2D الرسومات
NinePatchDrawable
شمل تسعة التصحيح
شمل تسعة التصحيح هو مورد المعرفة في شمل الذي يشير إلى ملف تسعة التصحيح. يمكن ل شمل تحديد الانحراف للصورة.

مكان الملف:
res/drawable/ filename .xml 
يتم استخدام اسم الملف كرقم تعريف المورد.
تجميع نوع بيانات الموارد:
مؤشر الموارد إلى NinePatchDrawable .
مرجع الموارد:
في جافا: R.drawable. filename R.drawable. filename 
في شمل: @[ package :]drawable/ filename
بناء الجملة:









<?xml version="1.0" encoding="utf-8"?>
<nine-patch
   
xmlns:android="http://schemas.android.com/apk/res/android"
   
android:src="@[package:]drawable/drawable_resource"
   
android:dither=["true" | "false"] />

عناصر:
<nine-patch>
يحدد مصدر التصحيح تسعة وخصائصه.
الصفات:

xmlns:android
سلسلة . مطلوب. يحدد مساحة اسم شمل، والتي يجب أن تكون "http://schemas.android.com/apk/res/android" .
android:src
مورد دراوابل . مطلوب . الرجوع إلى ملف تسعة-باتش.
android:dither
منطقي . تمكين أو تعطيل تدرج الصورة النقطية إذا لم يكن لدى الصورة النقطية نفس التكوين البكسل كالشاشة (على سبيل المثال: صورة نقطية أرجب 8888 مع شاشة رغب 565).
مثال:
<?xml version="1.0" encoding="utf-8"?>
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
   
android:src="@drawable/myninepatch"
   
android:dither="false" />


المشاركات الشائعة