تفاصيل معرف موارد Android
عادة ما نستخدم طريقة FindViewById للحصول على الموارد. على سبيل المثال ، غالبًا ما نستخدم مثل هذه العبارات في طريقة OnCreate:
btnchecked = (ImageView) findViewById (r.id.imgcheck) ؛
FindViewById هي وسيلة مريحة لنا للحصول على كائنات عرض مختلفة في تخطيط مثل الأزرار والعلامات و ListView و ImageView. كما يوحي الاسم ، فإنه يتطلب معلمة int: معرف المورد.
معرف المورد مفيد للغاية. يقوم Android تلقائيًا بتعيين معرف لكل مورد موجود في دليل RES ، بما في ذلك العديد من ملفات الصور وكائنات "@+ID" في نص XML. يتم إصلاح الدليل الفرعي للدقة دائمًا تقريبًا ، مثل تلك التي يمكنك رؤيتها في كل مرة: Drawable-XXXX ، تخطيط ، القيم ، وغير المألوف: الرسوم المتحركة ، XML ، الصف ، اللون.
كتب Android Texbooks:
RES/ Drawable/ يستخدم لتخزين ملفات الصور ؛
RES/ تخطيط/ يستخدم لتخزين ملفات تعريف التصميم ؛
يتم استخدام الدقة/ القيم/ لتخزين بعض المتغيرات والمعلمات والملفات الأخرى.
هذا كل ما نعرفه بالفعل. بالإضافة إلى ذلك ، سيقوم Android بتعيين معرفات لجميع الموارد في دليل RES ، ومبادئ التخصيص الرئيسية هي:
تعد ملفات الصور التي يمكن رسمها دائمًا معرف مورد واحد لكل ملف.
سيتم تعيين كل طريقة عرض في ملف XML الذي يستخدم Android: id = "@+id/xxx" معرف مورد غير مستخدم.
ربما سيضيف الجميع بعض القواعد الأخرى الأكثر تعقيدًا.
في ADK API ، هناك العديد من الطرق التي تستخدم معرف المورد فعليًا كمعلمة.
على سبيل المثال ، طريقة getDrawable:
getResources (). getDrawable (r.drawable.sendsms_bk)) ؛
حرفيًا ، تقوم طريقة getResources بإرجاع arroid.content.res.Resources Object.
تقوم طريقة getDrawalbe بإرجاع كائن قابل للرسمية ، ونحن نعلم أن هذه صورة.
المعلمة المستخدمة بواسطة طريقة getDrawable هي معرف المورد.
ومع ذلك ، ما هي الأرقام هذه معرفات الموارد int؟ أو حيث يتم وضعها جميعًا. إذا كنت حريصًا بما فيه الكفاية ، فيمكنك العثور عليها في ملف R.Java في دليل Gen. يحتوي كل معرف عدد صحيح سداسي عشري على اسم سمة OO للغاية ، فهي كلها نهائية ثابتة عامة ، ويوصى بعدم تعديلها يدويًا. تقع معرفات الموارد هذه في التسلسلات الهرمية فئة مختلفة. إذا نظرت بعناية ، ستجد بعض القواعد. على سبيل المثال ، يمثل معرف الموارد في الفئة القابلة للرسوم بالفعل ملف الصورة في الدليل الدائم/الرسم ؛ يمثل معرف المورد الوارد في فئة التخطيط ملف XML في دليل RES/Layout ؛ يمثل معرف المورد الموجود في فئة المعرف في الواقع كائن عنصر واجهة المستخدم باستخدام Android: id = "@+id/xxx" في ملف XML التخطيط - بالطبع ، إذا كنت تستخدم "@+إطار/xxx" ، سيتم إنشاء فئة تسمى الإطار في R.Java عند التجميع.
من خلال الفهم أعلاه ، وجدنا أن معرف الموارد هو متغير أو خاصية تبدأ بـ "R." - لأنه يتم تعريفه كله في فئة R - هذه الفئة ليست هي نفسها مثل Android.r ، وهي ليست في نفس مستوى الحزمة. السابق يحدد موارد إطار Android ، مثل: Android.r.layout.simple_expandable_list_item_1 ، android.r.layout.simple_expandable_list_item_2. هل استخدمت هذه الموارد؟ إذا كان لديك وقت ، فقد تجربه كذلك. الآخر R هو R لدينا ، والذي يحدد معرف الموارد الخاص بنا. يمكننا استخدام معرفات الموارد في R.xxxx.yy الموجه نحو الكائن ، وبالطبع يمكننا استخدامها مباشرة مع الأرقام السداسية.
معرف المورد مهم للغاية في Android ، حتى نتمكن من الحصول على المورد طالما حصلنا على معرف المورد. لأنه في بعض الحالات ، لا يمكننا استخدام ثابت مثل معرف المورد (لأننا نريد استبداله بمتغير) ، يمكننا فقط الحصول على معرف المورد ديناميكيًا بطريقتين:
1. الانعكاس
انعكاس جافا قوي لدرجة أننا نفكر فيه دائمًا عندما نكون يائسين. دعونا نلقي نظرة على قطعة من الكود:
حاول {field field = r.drawable.class.getfield (type) ؛ int i = field.getInt (new R.Drawable ()) ؛ log.d (tag ، i+"") ؛ return i ؛} catch (استثناء e) {log.e (tag ، e.toString ()) ؛ return r.drawable.unknow ؛}النوع متغير ، وستكون قيمه المحتملة "إغلاق" ، "تحرير" ، "أيقونة" ، إلخ. نستخدم حقل فئة انعكاس Java للوصول إلى حقل أسفل فئة R.Drawable. في الواقع ، نحن نعلم أن الحقل تحت R.Drawable هو معرف المورد لملف الصورة في دليل Res.Drawable-xxxx. لذلك ، فإن تشغيل الكود أعلاه هو في الواقع للحصول على معرف المورد لملف الصورة المقابل من خلال سلسلة. على سبيل المثال ، عندما تكون قيمة النوع "أيقونة" ، سيحصل الرمز أعلاه على معرف المورد لملف صورة ICON.PNG في دليل Res.Drawable-xxxx وإعادته إلينا. من الطبيعي بالنسبة لنا أن نعرض الصورة في ImageView من خلال معرف المورد.
2. استخدم طريقة getIdentifier لفئة الموارد
استخدام الانعكاس لا يزال مشكلة. إذا كنت تستخدم فئة Android.content.res.Resources لفعل الشيء نفسه ، فهي مجرد جملتين:
الموارد الدقة = getResources () ؛ return res.getIdentifier (type ، "drawable" ، getPackageName ()) ؛
تأتي طريقة getResources من contextxt (أي فئة النشاط) ، والتي يمكنها إعادة كائن الموارد مباشرة. يمكن أن تُرجع طريقة GetIdentifier للموارد أي معرف مورد في R.Java. بالطبع ، يجب عليك تحديد 3 معلمات: اسم الحقل واسم الفصل واسم الحزمة. جزء اسم الحزمة من الاسم المؤهل بالكامل المحدد باسم الحزمة. إذا كان الاسم المؤهل بالكامل لـ R هو Android.r أو com.company.r ، فإن اسم الحزمة هو "Android" أو "com.company". GetPackagename هو في الواقع this.getPackagename () ، والذي يعيد مباشرة اسم الحزمة لهذه الفئة.
اسم الفصل هو الفصل الذي ينتمي إليه المورد. على سبيل المثال ، كما نعلم ، يتم تعريف العديد من الفئات الثابتة في فئة R.Java: معرف ، معرف ، سلسلة ، تخطيط ، وما إلى ذلك ، والعديد من معرفات الموارد تحددها.
اسم الحقل هو اسم معرف المورد. على سبيل المثال ، تعريف معرف المورد:
Public Static Final int del = 0x7f020002 ؛
DEL هو اسم معرف المورد ، و 0x7F020002 هو قيمته سداسي عشرية.
مع 3 معلمات ، يمكن أن تحصل طريقة GetIdentIdifier على معرف المورد من خلال مقارنة الطرق الديناميكية.
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!