منابع فایلهای اضافی و محتوای ثابتی هستند که کد شما از آنها استفاده میکند، مانند بیت مپ، تعاریف طرحبندی، رشتههای رابط کاربری، دستورالعملهای انیمیشن و غیره.
همیشه منابع برنامه مانند تصاویر و رشته ها را از کد خود بیرونی کنید تا بتوانید آنها را به طور مستقل نگهداری کنید. همچنین، منابع جایگزین را برای پیکربندیهای دستگاه خاص با گروهبندی آنها در فهرستهای منابع با نام خاص ارائه کنید. در زمان اجرا، اندروید از منبع مناسب بر اساس پیکربندی فعلی استفاده می کند. به عنوان مثال، ممکن است بخواهید یک طرحبندی رابط کاربری متفاوت بسته به اندازه صفحه نمایش یا رشتههای مختلف بسته به تنظیمات زبان ارائه دهید.
هنگامی که منابع برنامه خود را خارجی کردید، می توانید با استفاده از شناسه منابعی که در کلاس R
پروژه شما تولید می شوند به آنها دسترسی داشته باشید. این سند به شما نشان می دهد که چگونه منابع پروژه اندروید خود را گروه بندی کنید. همچنین به شما نشان می دهد که چگونه می توانید منابع جایگزین را برای پیکربندی های دستگاه خاص تهیه کنید و سپس از کد برنامه یا سایر فایل های XML به آنها دسترسی داشته باشید.
انواع منابع گروهی
هر نوع منبع را در یک زیر شاخه خاص از دایرکتوری res/
پروژه خود قرار دهید. به عنوان مثال، در اینجا سلسله مراتب فایل برای یک پروژه ساده آمده است:
MyProject/ src/ MyActivity.java res/ drawable/ graphic.png layout/ main.xml info.xml mipmap/ icon.png values/ strings.xml
دایرکتوری res/
شامل تمام منابع در زیرشاخههای خود است: یک منبع تصویر، دو منبع طرحبندی، یک فهرست mipmap/
برای نمادهای راهانداز، و یک فایل منبع رشتهای. نام دایرکتوری منابع مهم است و در جدول 1 توضیح داده شده است.
توجه: برای اطلاعات بیشتر در مورد استفاده از پوشههای mipmap، به قرار دادن نمادهای برنامه در فهرستهای راهنمای mipmap مراجعه کنید.
جدول 1. دایرکتوری های منابع در داخل دایرکتوری res/
project پشتیبانی می شوند.
دایرکتوری | نوع منبع |
---|---|
animator/ | فایلهای XML که انیمیشنهای Property را تعریف میکنند. |
anim/ | فایل های XML که انیمیشن های Tween را تعریف می کنند. انیمیشن های Property را نیز می توان در این دایرکتوری ذخیره کرد، اما دایرکتوری animator/ برای انیمیشن های دارایی ترجیح داده می شود تا بین این دو نوع تمایز قائل شود. |
color/ | فایل های XML که لیست حالتی از رنگ ها را تعریف می کنند. برای اطلاعات بیشتر، به منبع فهرست حالت رنگ مراجعه کنید. |
drawable/ | فایلهای بیت مپ (PNG،
برای اطلاعات بیشتر، به منابع قابل ترسیم مراجعه کنید. |
mipmap/ | فایل های قابل کشیدن برای تراکم نمادهای مختلف راه اندازی. برای اطلاعات بیشتر در مورد مدیریت نمادهای راهانداز با پوشههای mipmap/ ، به قرار دادن نمادهای برنامه در فهرستهای راهنمای mipmap مراجعه کنید. |
layout/ | فایل های XML که یک طرح رابط کاربری را تعریف می کنند. برای اطلاعات بیشتر، به منبع Layout مراجعه کنید. |
menu/ | فایلهای XML که منوی برنامهها را تعریف میکنند، مانند منوی گزینهها، منوی زمینه یا منوی فرعی. برای اطلاعات بیشتر، به منبع منو مراجعه کنید. |
raw/ | فایل های دلخواه برای ذخیره به شکل خام. برای باز کردن این منابع با یک با این حال، اگر نیاز به دسترسی به نام فایل های اصلی و سلسله مراتب فایل دارید، به جای |
values/ | فایل های XML که حاوی مقادیر ساده مانند رشته ها، اعداد صحیح و رنگ ها هستند. در حالی که فایلهای منبع XML در دیگر دایرکتوریهای از آنجایی که هر منبع با عنصر XML خاص خود تعریف می شود، می توانید نام فایل را هر چه می خواهید بگذارید و انواع منابع مختلف را در یک فایل قرار دهید. با این حال، برای وضوح، ممکن است بخواهید انواع منابع منحصر به فرد را در فایل های مختلف قرار دهید. به عنوان مثال، در اینجا برخی از قراردادهای نام فایل برای منابعی که می توانید در این فهرست ایجاد کنید آورده شده است:
برای اطلاعات بیشتر، منابع رشته ، منبع سبک ، و انواع منابع بیشتر را ببینید. |
xml/ | فایل های XML دلخواه که در زمان اجرا با فراخوانی Resources.getXML() قابل خواندن هستند. فایلهای پیکربندی XML مختلف باید در اینجا ذخیره شوند، مانند پیکربندی جستجو . |
font/ | فایلهای فونت با پسوندهایی مانند TTF، OTF، یا TTC، یا فایلهای XML که شامل عنصر <font-family> هستند. برای اطلاعات بیشتر در مورد فونت ها به عنوان منابع، به افزودن فونت به عنوان منبع XML مراجعه کنید. |
احتیاط: هرگز فایل های منبع را مستقیماً در دایرکتوری res/
ذخیره نکنید. باعث خطای کامپایلر می شود.
برای کسب اطلاعات بیشتر در مورد انواع مختلف منابع، به نمای کلی انواع منابع مراجعه کنید.
منابعی که در زیر شاخه های تعریف شده در جدول 1 ذخیره می کنید منابع پیش فرض شما هستند. یعنی این منابع طراحی و محتوای پیش فرض اپلیکیشن شما را تعریف می کنند. با این حال، انواع مختلف دستگاههای مجهز به اندروید ممکن است به منابع مختلفی نیاز داشته باشند.
برای مثال، میتوانید منابع طرحبندی متفاوتی را برای دستگاههایی که صفحهنمایش بزرگتر از معمولی دارند، فراهم کنید تا از فضای اضافی صفحهنمایش استفاده کنید. همچنین میتوانید منابع رشتهای مختلفی را ارائه کنید که متن را در رابط کاربری خود بر اساس تنظیمات زبان دستگاه ترجمه میکنند. برای ارائه این منابع مختلف برای پیکربندیهای مختلف دستگاه، باید علاوه بر منابع پیشفرض، منابع جایگزین نیز ارائه دهید.
منابع جایگزین را فراهم کنید
اکثر برنامه ها منابع جایگزینی را برای پشتیبانی از تنظیمات دستگاه خاص ارائه می کنند. به عنوان مثال، منابع قابل ترسیم جایگزین برای تراکم صفحه های مختلف و منابع رشته جایگزین برای زبان های مختلف را شامل شود. در زمان اجرا، Android پیکربندی فعلی دستگاه را شناسایی می کند و منابع مناسب را برای برنامه شما بارگیری می کند.
![](https://developer.android.com/static/images/resources/resource_devices_diagram2.png?authuser=1&hl=fa)
شکل 1. دو دستگاه با استفاده از منابع طرح بندی مختلف بر اساس اندازه صفحه نمایش.
برای تعیین گزینه های خاص پیکربندی برای مجموعه ای از منابع، موارد زیر را انجام دهید:
- یک دایرکتوری جدید در
res/
با نام<resources_name> - <qualifier>
ایجاد کنید.-
<resources_name>
نام دایرکتوری منابع پیش فرض مربوطه است (تعریف شده در جدول 1). -
<qualifier>
نامی است که پیکربندی فردی را مشخص می کند که این منابع باید برای آن استفاده شوند (تعریف شده در جدول 2).
شما می توانید بیش از یک
<qualifier>
را اضافه کنید. هر کدام را با یک خط تیره جدا کنید.احتیاط: هنگام ضمیمه کردن چندین واجد شرایط، باید آنها را به همان ترتیبی که در جدول 2 فهرست شده است قرار دهید.
-
- منابع جایگزین مناسب را در این فهرست جدید ذخیره کنید. فایل های منبع باید دقیقاً مانند فایل های منبع پیش فرض نامگذاری شوند.
به عنوان مثال، در اینجا برخی از منابع پیش فرض و جایگزین وجود دارد:
res/ drawable/ icon.png background.png drawable-hdpi/ icon.png background.png
واجد شرایط hdpi
نشان می دهد که منابع موجود در آن دایرکتوری برای دستگاه هایی با صفحه نمایش با چگالی بالا هستند. تصاویر موجود در این دایرکتوریهای قابل ترسیم برای تراکم صفحهنمایش خاص اندازهگیری میشوند، اما نام فایلها دقیقاً یکسان است. به این ترتیب، شناسه منبعی که برای ارجاع به تصویر icon.png
یا background.png
استفاده میکنید همیشه یکسان است. Android با مقایسه اطلاعات پیکربندی دستگاه با واجد شرایط موجود در نام فهرست منابع، نسخهای از هر منبع را انتخاب میکند که بهترین تطابق را با دستگاه فعلی دارد.
احتیاط: هنگام تعریف یک منبع جایگزین، مطمئن شوید که منبع را در یک پیکربندی پیش فرض نیز تعریف کرده اید. در غیر این صورت، وقتی دستگاه پیکربندی را تغییر میدهد، ممکن است برنامه شما با استثناهای زمان اجرا مواجه شود. به عنوان مثال، اگر یک رشته را فقط به values-en
اضافه کنید و نه values
، برنامه شما ممکن است زمانی که کاربر زبان سیستم پیشفرض را تغییر میدهد با یک استثنای Resource Not Found
مواجه شود.
جدول 2 واجد شرایط پیکربندی معتبر را به ترتیب اولویت فهرست می کند. با جدا کردن هر یک از واجد شرایط با یک خط تیره، میتوانید چندین واجد شرایط را به نام یک فهرست اضافه کنید. اگر از چندین واجد شرایط برای دایرکتوری منبع استفاده می کنید، باید آنها را به ترتیب فهرست شده در جدول به نام دایرکتوری اضافه کنید.
جدول 2. نام های واجد شرایط پیکربندی.
پیکربندی | مقادیر واجد شرایط | توضیحات |
---|---|---|
MCC و MNC | مثال ها:mcc310
mcc208-mnc00 | کد کشور تلفن همراه (MCC)، به صورت اختیاری با کد شبکه تلفن همراه (MNC) از سیم کارت موجود در دستگاه. به عنوان مثال، اگر دستگاه از اتصال رادیویی استفاده می کند (یعنی یک تلفن GSM است)، مقادیر MCC و MNC از سیم کارت می آیند. همچنین می توانید از MCC به تنهایی استفاده کنید، به عنوان مثال، برای گنجاندن منابع قانونی خاص کشور در برنامه خود. اگر نیاز به تعیین فقط بر اساس زبان دارید، به جای آن از واجد شرایط زبان، اسکریپت (اختیاری) و منطقه (اختیاری) استفاده کنید. اگر از واجد شرایط MCC و MNC استفاده می کنید، این کار را با احتیاط انجام دهید و آزمایش کنید که همانطور که انتظار می رود کار می کند. همچنین فیلدهای پیکربندی |
زبان، خط (اختیاری) و منطقه (اختیاری) | مثال ها:en fr en-rUS fr-rFR fr-rCA b+en b+en+US b+es+419 b+zh+Hant b+sr+Latn+RS | این زبان با یک کد زبان دو حرفی ISO 639-1 ، به صورت اختیاری با یک کد منطقه ای دو حرفی ISO 3166-1-alpha-2 (قبل از حروف کوچک کدها به حروف بزرگ و کوچک حساس نیستند . پیشوند Android 7.0 (سطح API 24) از برچسبهای زبان BCP 47 پشتیبانی میکند که میتوانید از آن برای واجد شرایط بودن منابع خاص زبان و منطقه استفاده کنید. یک تگ زبان از دنباله ای از یک یا چند زیربرچسب تشکیل شده است که هر کدام محدوده زبانی را که توسط تگ کلی مشخص می شود، اصلاح یا محدود می کند. برای اطلاعات بیشتر درباره برچسبهای زبان، به برچسبهایی برای شناسایی زبانها مراجعه کنید. برای استفاده از یک تگ زبان BCP 47، اگر کاربران زبان خود را در تنظیمات سیستم تغییر دهند، برچسب زبان می تواند در طول عمر برنامه شما تغییر کند. برای اطلاعات در مورد اینکه چگونه این می تواند برنامه شما را در طول زمان اجرا تحت تاثیر قرار دهد، به کنترل تغییرات پیکربندی مراجعه کنید. برای یک راهنمای کامل برای بومی سازی برنامه خود برای زبان های دیگر، به محلی سازی برنامه خود مراجعه کنید. همچنین متد |
جهت چیدمان | ldrtl ldltr | جهت چیدمان برنامه شما. این میتواند برای هر منبعی مانند طرحبندیها، نقشهها یا مقادیر اعمال شود. برای مثال، اگر میخواهید یک طرحبندی خاص برای زبان عربی و یک طرح کلی برای هر زبان «راست به چپ» دیگر، مانند فارسی یا عبری، ارائه دهید، از دایرکتوریهایی مانند زیر استفاده میکنید: توجه: برای فعال کردن ویژگی های چیدمان راست به چپ برای برنامه خود، باید در سطح 17 API اضافه شد. |
کوچکترین عرض | sw<N>dp مثال ها: sw320dp sw600dp sw720dp و غیره | کوتاهترین بعد صفحه نمایش در دسترس یک برنامه. به طور خاص، به عنوان مثال، اگر چیدمان شما مستلزم این است که کوچکترین بعد مساحت صفحه آن همیشه حداقل 600 dp باشد، میتوانید از این واجد شرایط برای ایجاد منابع طرحبندی در دایرکتوری استفاده از کوچکترین عرض برای تعیین اندازه کلی صفحه نمایش مفید است زیرا عرض اغلب عامل محرک در طراحی یک چیدمان است. یک UI اغلب به صورت عمودی پیمایش می کند، اما محدودیت های نسبتاً سختی در حداقل فضایی که به صورت افقی نیاز دارد، دارد. عرض موجود همچنین عامل کلیدی در تعیین اینکه آیا از طرح بندی یک جداره برای گوشی ها استفاده شود یا از طرح چند صفحه ای برای تبلت ها است. بنابراین، شما احتمالاً بیشترین اهمیت را به کمترین عرض ممکن در هر دستگاه دارید. کوچکترین عرض یک دستگاه، تزئینات صفحه نمایش و رابط کاربری سیستم را در نظر می گیرد. به عنوان مثال، اگر دستگاه دارای عناصر رابط کاربری دائمی بر روی صفحه باشد که فضایی را در امتداد محور کوچکترین عرض به حساب می آورند، سیستم کوچکترین عرض را کوچکتر از اندازه واقعی صفحه نمایش اعلام می کند، زیرا اینها پیکسل های صفحه نمایش هستند که برای رابط کاربری شما در دسترس نیستند. . برخی از مقادیری که ممکن است در اینجا برای اندازه های معمول صفحه نمایش استفاده کنید:
هنگامی که برنامه شما چندین دایرکتوری منبع را با مقادیر مختلف برای واجد شرایط در سطح API 13 اضافه شده است. همچنین ویژگی برای اطلاعات بیشتر در مورد طراحی برای صفحههای مختلف با استفاده از این واجد شرایط، به طراحی واکنشگرا/تطبیقی با نماها مراجعه کنید. |
عرض و ارتفاع موجود | w<N>dp h<N>dp مثال ها: w720dp w1024dp h720dp h1024dp و غیره | حداقل عرض یا ارتفاع صفحه نمایش (بر حسب واحدهای عرض و ارتفاع موجود اغلب برای تعیین اینکه آیا از طرحبندی چند صفحهای استفاده شود مفید است، زیرا حتی در یک دستگاه تبلت، اغلب نمیخواهید همان طرح چند صفحهای را برای جهتگیری عمودی مانند منظره دارید. بنابراین، میتوانید از اینها برای تعیین حداقل عرض و/یا ارتفاع مورد نیاز برای چیدمان استفاده کنید، بهجای استفاده از معیارهای اندازه صفحه و جهتگیری با هم. هنگامی که برنامه شما چندین فهرست منبع با مقادیر مختلف برای این پیکربندی ها ارائه می دهد، سیستم از نزدیک ترین دایرکتوری به (بدون فراتر رفتن) عرض صفحه نمایش فعلی دستگاه استفاده می کند. نزدیکترین به با اضافه کردن تفاوت بین عرض واقعی صفحه نمایش و عرض مشخص شده به اختلاف بین ارتفاع واقعی صفحه نمایش و ارتفاع مشخص شده تعیین می شود، با ارتفاع و عرض نامشخص دارای مقدار 0. مقادیر مساحت اشغال شده توسط Insets Window را حذف نمیکنند، بنابراین اگر دستگاه دارای عناصر رابط کاربری دائمی در لبههای نمایشگر باشد، مقادیر عرض و ارتفاع از ابعاد واقعی صفحه کوچکتر است، حتی زمانی که برنامه لبه به لبه با استفاده از برخی از تزئینات عمودی صفحه که ثابت نیستند (مانند نوار وضعیت تلفن که میتواند در حالت تمام صفحه پنهان شود) در اینجا در نظر گرفته نمیشوند ، همچنین تزئینات پنجره مانند نوار عنوان یا نوار عمل وجود ندارد، بنابراین برنامهها باید برای مقابله با آنها آماده باشند. فضای کمی کوچکتر از آنچه آنها مشخص می کنند. توجه: سیستم منبعی را انتخاب می کند که هم از نظر عرض و هم از نظر ارتفاع مطابقت داشته باشد. بنابراین منبعی که هر دو را مشخص میکند به شدت بر منبعی که فقط یکی یا دیگری را مشخص میکند ترجیح داده میشود. به عنوان مثال، اگر صفحه نمایش واقعی 720 dp عرض در 1280 dp بالا باشد و یک منبع با w720dp و منبع دیگر به عنوان w700dp-h1200dp واجد شرایط باشد، دومی انتخاب می شود حتی اگر اولی دقیقاً مطابق با آنچه مشخص می شود باشد. در سطح API 13 اضافه شده است. همچنین فیلدهای پیکربندی برای اطلاعات بیشتر در مورد طراحی برای صفحههای مختلف با استفاده از این واجد شرایط، به طراحی واکنشگرا/تطبیقی با نماها مراجعه کنید. |
اندازه صفحه نمایش | small normal large xlarge |
توجه: استفاده از واجد شرایط اندازه به این معنی نیست که منابع فقط برای صفحه نمایش هایی با آن اندازه هستند. اگر منابع جایگزین را با واجد شرایطی که بهتر با پیکربندی دستگاه فعلی مطابقت دارند ارائه نکنید، سیستم میتواند از منابعی که بهترین منطبق هستند استفاده کند. احتیاط: اگر همه منابع شما از یک واجد شرایط اندازه استفاده می کنند که بزرگتر از صفحه فعلی است، سیستم از آنها استفاده نمی کند و برنامه شما در زمان اجرا خراب می شود. این اتفاق میافتد، برای مثال، اگر همه منابع طرحبندی با واجد شرایط در سطح 4 API اضافه شده است. همچنین قسمت پیکربندی برای اطلاعات بیشتر، به نمای کلی سازگاری صفحه مراجعه کنید. |
جنبه صفحه نمایش | long notlong |
در سطح 4 API اضافه شده است. این صرفاً بر اساس نسبت ابعاد صفحه نمایش است (صفحه نمایش همچنین فیلد پیکربندی |
صفحه گرد | round notround |
در سطح 23 API اضافه شده است. همچنین روش پیکربندی |
وسعت رنگ گسترده | widecg nowidecg |
در سطح 26 API اضافه شد. همچنین روش پیکربندی |
محدوده دینامیکی بالا (HDR) | highdr lowdr |
در سطح 26 API اضافه شد. همچنین روش پیکربندی |
جهت صفحه نمایش | port land |
اگر کاربر صفحه را بچرخاند، این می تواند در طول عمر برنامه شما تغییر کند. برای اطلاعات در مورد اینکه چگونه این مورد بر برنامه شما در طول زمان اجرا تأثیر می گذارد، به کنترل تغییرات پیکربندی مراجعه کنید. همچنین فیلد پیکربندی |
حالت رابط کاربری | car desk television appliance watch vrheadset |
اضافه شده در API سطح 8. تلویزیون اضافه شده در API 13. ساعت اضافه شده در API 20. برای اطلاعاتی در مورد اینکه برنامه شما چگونه میتواند هنگام قرار دادن یا برداشتن دستگاه در یک پایه، پاسخ دهد، وضعیت اتصال را تعیین و نظارت کنید و تایپ کنید . اگر کاربر دستگاه را در یک داک قرار دهد، ممکن است در طول عمر برنامه شما تغییر کند. می توانید برخی از این حالت ها را با استفاده از |
حالت شب | night notnight |
در سطح 8 API اضافه شده است. اگر حالت شب در حالت خودکار (پیشفرض) باقی بماند، این میتواند در طول عمر برنامه شما تغییر کند، در این صورت حالت بر اساس زمان روز تغییر میکند. می توانید این حالت را با استفاده از |
تراکم پیکسلی صفحه نمایش (dpi) | ldpi mdpi hdpi xhdpi xxhdpi xxxhdpi nodpi tvdpi anydpi nnn dpi |
یک نسبت مقیاس بندی 3:4:6:8:12:16 بین شش چگالی اولیه وجود دارد (بدون توجه به چگالی tvdpi). بنابراین، یک بیت مپ 9x9 در ldpi 12x12 در mdpi، 18x18 در hdpi، 24x24 در xhdpi و غیره است. توجه: استفاده از واجد شرایط چگالی به این معنی نیست که منابع فقط برای صفحههایی با آن چگالی هستند. اگر منابع جایگزین با واجد شرایطی که بهتر با پیکربندی دستگاه فعلی مطابقت دارند ارائه نکنید، سیستم از منابعی که بهترین منطبق هستند استفاده می کند. برای اطلاعات بیشتر در مورد نحوه مدیریت تراکمهای مختلف صفحه و اینکه چگونه Android ممکن است بیت مپهای شما را متناسب با چگالی فعلی مقیاس کند، به نمای کلی سازگاری صفحه رجوع کنید. |
نوع صفحه نمایش لمسی | notouch finger |
همچنین قسمت پیکربندی |
در دسترس بودن صفحه کلید | keysexposed keyshidden keyssoft |
اگر منابع اگر کاربر صفحه کلید سخت افزاری را باز کند، این می تواند در طول عمر برنامه شما تغییر کند. برای اطلاعات در مورد اینکه چگونه این مورد بر برنامه شما در طول زمان اجرا تأثیر می گذارد، به کنترل تغییرات پیکربندی مراجعه کنید. همچنین فیلدهای پیکربندی |
روش ورودی متن اصلی | nokeys qwerty 12key |
همچنین فیلد پیکربندی |
در دسترس بودن کلید ناوبری | navexposed navhidden |
اگر کاربر کلیدهای پیمایش را فاش کند، میتواند در طول عمر برنامه شما تغییر کند. برای اطلاعات در مورد اینکه چگونه این مورد بر برنامه شما در طول زمان اجرا تأثیر می گذارد، به کنترل تغییرات پیکربندی مراجعه کنید. همچنین قسمت پیکربندی |
روش ناوبری بدون لمس اولیه | nonav dpad trackball wheel |
همچنین قسمت پیکربندی |
نسخه پلتفرم (سطح API) | مثال ها:v3 v4 v7 و غیره | سطح API پشتیبانی شده توسط دستگاه. به عنوان مثال، |
توجه: همه نسخههای اندروید از همه واجد شرایط پشتیبانی نمیکنند. استفاده از یک واجد شرایط جدید به طور ضمنی واجد شرایط نسخه پلتفرم را اضافه می کند تا دستگاه های قدیمی تر بتوانند آن را نادیده بگیرند. به عنوان مثال، استفاده از یک واجد شرایط w600dp
به طور خودکار شامل واجد شرایط v13
میشود، زیرا واجد شرایط با عرض موجود در سطح API 13 جدید بود. برای جلوگیری از هر گونه مشکل، همیشه مجموعهای از منابع پیشفرض (مجموعهای از منابع بدون واجد شرایط ) را در نظر بگیرید. برای اطلاعات بیشتر، به بخش ارائه بهترین سازگاری دستگاه با منابع مراجعه کنید.
قوانین نام واجد شرایط
در اینجا قوانینی در مورد استفاده از نامهای واجد شرایط پیکربندی وجود دارد:
- میتوانید برای یک مجموعه از منابع، چندین واجد شرایط، که با خط تیره از هم جدا شدهاند، مشخص کنید. برای مثال،
drawable-en-rUS-land
برای دستگاههای انگلیسی-آمریکایی در جهت افقی اعمال میشود. - واجدین شرایط باید به ترتیب ذکر شده در جدول 2 باشد.
- اشتباه:
drawable-hdpi-port/
- صحیح:
drawable-port-hdpi/
- اشتباه:
- دایرکتوری های منابع جایگزین را نمی توان تودرتو کرد. به عنوان مثال، شما نمی توانید
res/drawable/drawable-en/
داشته باشید. - مقادیر به حروف بزرگ و کوچک حساس هستند. کامپایلر منبع، نام دایرکتوری ها را قبل از پردازش به حروف کوچک تبدیل می کند تا در سیستم های فایل حساس به حروف بزرگ و کوچک دچار مشکل نشود. هر گونه حروف بزرگ در نام ها فقط به نفع خوانایی است.
- فقط یک مقدار برای هر نوع واجد شرایط پشتیبانی می شود. به عنوان مثال، اگر می خواهید از فایل های قابل ترسیم مشابهی برای اسپانیا و فرانسه استفاده کنید، نمی توانید دایرکتوری با نام
drawable-es-fr/
داشته باشید. در عوض، شما به دو دایرکتوری منبع، مانندdrawable-es/
وdrawable-fr/
نیاز دارید که حاوی فایل های مناسب هستند. با این حال، شما نیازی به کپی فایل ها در هر دو مکان ندارید. در عوض، همانطور که در بخش Create alias resources توضیح داده شده است، می توانید یک نام مستعار برای یک منبع ایجاد کنید.
پس از ذخیره منابع جایگزین در دایرکتوری هایی که با این واجد شرایط نامگذاری شده اند، Android به طور خودکار منابع موجود در برنامه شما را بر اساس پیکربندی فعلی دستگاه اعمال می کند. هر بار که منبعی درخواست میشود، Android فهرستهای منابع جایگزین را که حاوی فایل منبع درخواستی هستند بررسی میکند، سپس بهترین منبع را پیدا میکند .
اگر هیچ منبع جایگزینی وجود نداشته باشد که با پیکربندی دستگاه خاصی مطابقت داشته باشد، Android از منابع پیشفرض مربوطه استفاده میکند - مجموعهای از منابع برای یک نوع منبع خاص که شامل واجد شرایط پیکربندی نیست.
منابع نام مستعار ایجاد کنید
وقتی منبعی دارید که میخواهید از آن برای پیکربندی بیش از یک دستگاه استفاده کنید، اما نمیخواهید آن را به عنوان یک منبع پیشفرض ارائه کنید، نیازی نیست که همان منبع را در بیش از یک فهرست منبع جایگزین قرار دهید. در عوض، می توانید یک منبع جایگزین ایجاد کنید که به عنوان نام مستعار برای منبع ذخیره شده در فهرست منابع پیش فرض شما عمل می کند.
توجه: همه منابع مکانیزمی را ارائه نمی دهند که به وسیله آن بتوانید یک نام مستعار برای منبع دیگری ایجاد کنید. به طور خاص، انیمیشن، منو، خام و سایر منابع نامشخص در فهرست xml/
این ویژگی را ارائه نمی دهند.
به عنوان مثال، تصور کنید یک نماد برنامه، icon.png
دارید و به یک نسخه منحصر به فرد از آن برای مناطق مختلف نیاز دارید. با این حال، دو زبان انگلیسی-کانادایی و فرانسوی-کانادایی باید از یک نسخه استفاده کنند. شما نیازی به کپی کردن همان تصویر در فهرست منابع برای هر دو زبان انگلیسی-کانادایی و فرانسوی-کانادایی ندارید. در عوض، میتوانید تصویری را که برای هر دو استفاده میشود، با استفاده از هر نامی غیر از icon.png
، مانند icon_ca.png
، ذخیره کنید و آن را در فهرست پیشفرض res/drawable/
قرار دهید. سپس یک فایل icon.xml
در res/drawable-en-rCA/
و res/drawable-fr-rCA/
ایجاد کنید که به منبع icon_ca.png
با استفاده از عنصر <bitmap>
اشاره دارد. این به شما امکان می دهد فقط یک نسخه از فایل PNG و دو فایل کوچک XML را که به آن اشاره می کنند ذخیره کنید. برای جزئیات بیشتر به نمونه ها در بخش های زیر مراجعه کنید.
قابل کشیدن
برای ایجاد نام مستعار برای یک drawable موجود، از عنصر <drawable>
استفاده کنید:
<?xml version="1.0" encoding="utf-8"?> <resources> <drawable name="icon">@drawable/icon_ca</drawable> </resources>
اگر این فایل را بهعنوان icon.xml
در یک فهرست منبع جایگزین ذخیره کنید، مانند res/values-en-rCA/
، در منبعی کامپایل میشود که میتوانید به عنوان R.drawable.icon
ارجاع دهید، اما در واقع نام مستعار برای منبع R.drawable.icon_ca
که در res/drawable/
ذخیره شده است.
طرح بندی
برای ایجاد نام مستعار برای یک طرح بندی موجود، از عنصر <include>
استفاده کنید که در یک <merge>
پیچیده شده است:
<?xml version="1.0" encoding="utf-8"?> <merge> <include layout="@layout/main_ltr"/> </merge>
اگر این فایل را به عنوان main.xml
ذخیره کنید، در منبعی که می توانید به عنوان R.layout.main
ارجاع دهید، کامپایل می شود، اما در واقع نام مستعار منبع R.layout.main_ltr
است.
رشته ها و سایر مقادیر ساده
برای ایجاد نام مستعار برای یک رشته موجود، از شناسه منبع رشته مورد نظر به عنوان مقدار رشته جدید استفاده کنید:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello</string> <string name="hi">@string/hello</string> </resources>
منبع R.string.hi
اکنون نام مستعار R.string.hello
است.
سایر مقادیر ساده به همین ترتیب عمل می کنند، مانند رنگ ها:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="red">#f00</color> <color name="highlight">@color/red</color> </resources>
به منابع برنامه خود دسترسی داشته باشید
هنگامی که منبعی را در برنامه خود ارائه کردید، می توانید آن را با ارجاع به شناسه منبع آن اعمال کنید. همه شناسههای منبع در کلاس R
پروژه شما تعریف شدهاند که ابزار aapt
به طور خودکار تولید میکند.
هنگامی که برنامه شما کامپایل می شود، aapt
کلاس R
را تولید می کند که حاوی شناسه های منبع برای همه منابع موجود در دایرکتوری res/
است. برای هر نوع منبع، یک زیر کلاس R
وجود دارد، مانند R.drawable
برای همه منابع قابل ترسیم. و برای هر منبع از آن نوع، یک عدد صحیح ثابت وجود دارد، به عنوان مثال، R.drawable.icon
. این عدد صحیح شناسه منبعی است که می توانید برای بازیابی منبع خود از آن استفاده کنید.
اگرچه کلاس R
جایی است که شناسه منبع مشخص شده است، برای کشف یک شناسه منبع نیازی به جستجو در آنجا ندارید. شناسه منبع همیشه از موارد زیر تشکیل شده است:
- نوع منبع : هر منبع در یک "نوع" مانند
string
،drawable
وlayout
گروه بندی می شود. برای اطلاعات بیشتر در مورد انواع مختلف، به نمای کلی انواع منابع مراجعه کنید. - نام منبع ، که یا نام پرونده به استثنای پسوند یا مقدار موجود در XML
android:name
Attribute است ، اگر منبع یک مقدار ساده است ، مانند یک رشته.
دو روش وجود دارد که می توانید به یک منبع دسترسی پیدا کنید:
- در کد: استفاده از یک عدد صحیح استاتیک از زیر کلاس کلاس
R
خود ، مانند:R.string.hello
string
نوع منبع است وhello
نام منبع است. بسیاری از API های Android وجود دارند که می توانند هنگام تهیه شناسه منبع در این قالب به منابع شما دسترسی پیدا کنند. برای اطلاعات بیشتر ، به بخش دسترسی در بخش کد مراجعه کنید. - در XML: استفاده از یک نحو XML ویژه که مطابق با شناسه منبع تعریف شده در کلاس
R
شما است ، مانند:@string/hello
string
نوع منبع است وhello
نام منبع است. شما می توانید از این نحو در یک منبع XML استفاده کنید در هر مکانی که انتظار می رود مقداری را که در یک منبع ارائه می دهید ، استفاده کنید. برای اطلاعات بیشتر ، به منابع دسترسی از بخش XML مراجعه کنید.
دسترسی به منابع در کد
می توانید با عبور از شناسه منبع به عنوان یک پارامتر روش ، از یک منبع در کد استفاده کنید. به عنوان مثال ، می توانید با استفاده از منبع res/drawable/myimage.png
با استفاده از setImageResource()
یک ImageView
تنظیم کنید.
کاتلین
val imageView = findViewById(R.id.myimageview) as ImageView imageView.setImageResource(R.drawable.myimage)
جاوا
ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
همچنین می توانید منابع فردی را با استفاده از روشهای موجود در Resources
بازیابی کنید ، که می توانید نمونه ای از getResources()
دریافت کنید.
نحو
در اینجا نحو برای مراجعه به یک منبع در کد وجود دارد:
[<package_name>.]R.<resource_type>.<resource_name>
-
<package_name>
نام بسته ای است که در آن منبع قرار دارد (هنگام مراجعه به منابع از بسته شخصی شما لازم نیست). -
<resource_type>
زیر کلاسR
برای نوع منبع است. -
<resource_name>
برای مقادیر ساده ، نام پرونده منبع بدون پسوند یاandroid:name
Attribute مقدار در عنصر XML است.
برای کسب اطلاعات بیشتر در مورد هر نوع منابع و نحوه مراجعه به آنها ، به نمای کلی انواع منابع مراجعه کنید.
موارد استفاده
روشهای بسیاری وجود دارد که یک پارامتر شناسه منبع را می پذیرند ، و می توانید منابع را با استفاده از روش های Resources
بازیابی کنید. می توانید نمونه ای از Resources
با استفاده از Context.getResources()
دریافت کنید.
در اینجا چند نمونه از دسترسی به منابع در کد آورده شده است:
کاتلین
// Load a background for the current screen from a drawable resource. window.setBackgroundDrawableResource(R.drawable.my_background_image) // Set the Activity title by getting a string from the Resources object, because // this method requires a CharSequence rather than a resource ID. window.setTitle(resources.getText(R.string.main_title)) // Load a custom layout for the current screen. setContentView(R.layout.main_screen) // Set a slide in animation by getting an Animation from the Resources object. flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in)) // Set the text on a TextView object using a resource ID. val msgTextView = findViewById(R.id.msg) as TextView msgTextView.setText(R.string.hello_message)
جاوا
// Load a background for the current screen from a drawable resource. getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ; // Set the Activity title by getting a string from the Resources object, because // this method requires a CharSequence rather than a resource ID. getWindow().setTitle(getResources().getText(R.string.main_title)); // Load a custom layout for the current screen. setContentView(R.layout.main_screen); // Set a slide in animation by getting an Animation from the Resources object. flipper.setInAnimation(AnimationUtils.loadAnimation(this, R.anim.hyperspace_in)); // Set the text on a TextView object using a resource ID. TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.setText(R.string.hello_message);
احتیاط: پرونده R.java
را با دست تغییر ندهید. هنگامی که پروژه شما تدوین می شود توسط ابزار aapt
تولید می شود. دفعه بعد که تدوین می شوید ، هرگونه تغییر نادیده گرفته می شود.
دسترسی به منابع از XML
شما می توانید مقادیر برخی از ویژگی ها و عناصر XML را با استفاده از مرجع به یک منبع موجود تعریف کنید. شما اغلب این کار را هنگام ایجاد پرونده های طرح بندی انجام می دهید تا رشته ها و تصاویر را برای ابزارک های خود تهیه کنید.
به عنوان مثال ، اگر Button
ای را به طرح خود اضافه می کنید ، از یک منبع رشته برای متن دکمه استفاده کنید:
<Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/submit" />
نحو
در اینجا نحو برای مراجعه به یک منبع در یک منبع XML آمده است:
@[<package_name>:]<resource_type>/<resource_name>
-
<package_name>
نام بسته ای است که در آن منبع قرار دارد (هنگام مراجعه به منابع از همان بسته مورد نیاز نیست). -
<resource_type>
زیر کلاسR
برای نوع منبع است. -
<resource_name>
برای مقادیر ساده ، نام پرونده منبع بدون پسوند یاandroid:name
Attribute مقدار در عنصر XML است.
برای کسب اطلاعات بیشتر در مورد هر نوع منابع و نحوه مراجعه به آنها ، به نمای کلی انواع منابع مراجعه کنید.
موارد استفاده
در بعضی موارد ، شما باید از یک منبع برای یک مقدار در XML استفاده کنید ، مانند یک تصویر قابل ترسیم در ویجت ، اما می توانید از هر مکانی که یک مقدار ساده را بپذیرد ، از یک منبع در XML استفاده کنید. به عنوان مثال ، اگر پرونده منابع زیر را دارید که شامل یک منبع رنگی و یک منبع رشته ای است:
<?xml version="1.0" encoding="utf-8"?> <resources> <color name="opaque_red">#f00</color> <string name="hello">Hello!</string> </resources>
برای تنظیم رنگ متن و رشته متن می توانید از این منابع در پرونده طرح زیر استفاده کنید:
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@color/opaque_red" android:text="@string/hello" />
در این حالت ، لازم نیست نام بسته را در مرجع منابع مشخص کنید ، زیرا منابع از بسته شخصی شما هستند. برای مراجعه به یک منبع سیستم ، همانطور که در مثال زیر نشان داده شده است ، باید نام بسته را درج کنید:
<?xml version="1.0" encoding="utf-8"?> <EditText xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:textColor="@android:color/secondary_text_dark" android:text="@string/hello" />
توجه: همیشه از منابع رشته ای استفاده کنید تا برنامه شما برای سایر زبانها بومی سازی شود. برای کسب اطلاعات در مورد ایجاد منابع جایگزین (مانند رشته های بومی شده) ، به منابع جایگزین مراجعه کنید. برای یک راهنمای کامل برای بومی سازی برنامه خود برای سایر زبانها ، به بومی سازی برنامه خود مراجعه کنید.
حتی می توانید از منابع در XML برای ایجاد نام مستعار استفاده کنید. به عنوان مثال ، شما می توانید یک منبع قابل ترسیم ایجاد کنید که یک نام مستعار برای یک منبع قابل ترسیم دیگر باشد:
<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/other_drawable" />
این به نظر می رسد زائد است ، اما می تواند هنگام استفاده از منابع جایگزین بسیار مفید باشد. برای اطلاعات بیشتر ، به بخش مربوط به ایجاد منابع Alias مراجعه کنید.
ویژگی های سبک مرجع
یک منبع ویژگی سبک به شما امکان می دهد تا مقدار یک ویژگی را در موضوع در حال حاضر کاربردی ارجاع دهید. مراجعه به یک ویژگی سبک به شما امکان می دهد تا به جای تهیه یک مقدار کدگذاری شده ، با استفاده از یک ظاهر طراحی شده با یک ظاهر طراحی شده ، ظاهر عناصر UI را با یک ظاهر طراحی شده برای مطابقت با تغییرات استاندارد تهیه شده توسط موضوع فعلی ، سفارشی کنید. ارجاع یک ویژگی سبک اساساً می گوید: "از سبکی استفاده کنید که توسط این ویژگی در موضوع فعلی تعریف شده است."
برای اشاره به یک ویژگی سبک ، نام نحو تقریباً با فرمت منابع عادی یکسان است ، اما به جای نماد "at" ( @
) ، از یک علامت سؤال ( ?
) استفاده کنید. بخش نوع منبع اختیاری است. بنابراین نحو مرجع به شرح زیر است:
?[<package_name>:][<resource_type>/]<resource_name>
به عنوان مثال ، در اینجا چگونه می توانید یک ویژگی را برای تنظیم رنگ متن برای مطابقت با رنگ متن ثانویه موضوع سیستم ارجاع دهید:
<EditText id="text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:textColor="?android:textColorSecondary" android:text="@string/hello_world" />
در اینجا ، android:textColor
ویژگی نام یک ویژگی سبک را در موضوع فعلی مشخص می کند. Android اکنون از مقدار اعمال شده در android:textColorSecondary
Style به عنوان مقدار android:textColor
در این ویجت استفاده می کند. از آنجا که ابزار منبع سیستم می داند که در این زمینه از منبع ویژگی انتظار می رود ، نیازی به بیان صریح از نوع نیست ، یعنی ?android:attr/textColorSecondary
. می توانید نوع attr
را حذف کنید.
به پرونده های اصلی دسترسی پیدا کنید
در حالی که غیر معمول است ، ممکن است به پرونده ها و دایرکتوری های اصلی خود دسترسی داشته باشید. اگر این کار را انجام دهید ، پس از ذخیره پرونده های خود در res/
برای شما کار نمی کند ، زیرا تنها راه خواندن یک منبع از res/
با شناسه منبع است. در عوض ، می توانید منابع خود را در assets/
دایرکتوری ذخیره کنید.
به پرونده های ذخیره شده در assets/
دایرکتوری ، شناسه منبع داده نمی شود ، بنابراین شما نمی توانید از طریق کلاس R
یا از منابع XML به آنها مراجعه کنید. درعوض ، می توانید پرونده ها را در assets/
دایرکتوری مانند یک سیستم فایل عادی پرس و جو کنید و داده های خام را با استفاده از AssetManager
بخوانید.
با این حال ، اگر تمام آنچه شما نیاز دارید امکان خواندن داده های خام (مانند پرونده ویدئویی یا صوتی) است ، سپس پرونده را در res/raw/
Directory ذخیره کنید و با استفاده از openRawResource()
جریان بایت را بخوانید.
به منابع پلت فرم دسترسی پیدا کنید
Android شامل تعدادی از منابع استاندارد مانند سبک ها ، مضامین و چیدمان است. برای دسترسی به این منابع ، مرجع منابع خود را با نام بسته android
واجد شرایط کنید. به عنوان مثال ، Android یک منبع چیدمان را ارائه می دهد که می توانید برای موارد لیست در ListAdapter
استفاده کنید:
کاتلین
listAdapter = ArrayAdapter(this, android.R.layout.simple_list_item_1, myarray)
جاوا
setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));
در این مثال ، simple_list_item_1
یک منبع چیدمان است که توسط سیستم عامل موارد موجود در یک ListView
تعریف شده است. می توانید به جای ایجاد طرح خود برای موارد لیست ، از این استفاده کنید.
بهترین سازگاری دستگاه را با منابع ارائه دهید
برای برنامه خود برای پشتیبانی از تنظیمات مختلف دستگاه ، بسیار مهم است که همیشه منابع پیش فرض را برای هر نوع منبعی که برنامه شما استفاده می کند ارائه دهید.
به عنوان مثال ، اگر برنامه شما از چندین زبان پشتیبانی می کند ، همیشه یک values/
دایرکتوری (که در آن رشته های شما ذخیره می شوند) را بدون داشتن صلاحیت زبان و منطقه درج کنید. اگر در عوض تمام پرونده های رشته خود را در دایرکتوری هایی که دارای یک زبان و منطقه هستند ، قرار دهید ، برنامه شما هنگام اجرا بر روی دستگاهی تنظیم شده به زبانی که رشته های شما از آن پشتیبانی نمی کنند ، خراب می شود.
تا زمانی که values/
منابع پیش فرض را ارائه دهید ، برنامه شما به درستی اجرا می شود ، حتی اگر کاربر زبانی را که ارائه می دهد درک نکند. بهتر از تصادف است.
به همین ترتیب ، اگر منابع طرح متفاوتی را بر اساس جهت گیری صفحه ارائه می دهید ، یک جهت گیری را به عنوان پیش فرض خود انتخاب کنید. به عنوان مثال ، به جای تأمین منابع چیدمان در layout-land/
برای چشم انداز و layout-port/
برای پرتره ، یکی را به عنوان پیش فرض ترک کنید ، مانند layout/
برای چشم انداز و layout-port/
برای پرتره.
ارائه منابع پیش فرض نه تنها به این دلیل است که برنامه شما ممکن است بر روی پیکربندی که پیش بینی نکرده اید اجرا شود ، بلکه به این دلیل است که نسخه های جدید Android گاهی اوقات مقدماتی پیکربندی را اضافه می کنند که نسخه های قدیمی از آنها پشتیبانی نمی کنند. اگر از صلاحیت منبع جدید استفاده می کنید ، اما سازگاری کد با نسخه های قدیمی Android را حفظ کنید ، پس وقتی نسخه قدیمی Android برنامه شما را اجرا می کند ، اگر منابع پیش فرض را ارائه ندهید ، خراب می شود ، زیرا نمی تواند از منابع نامگذاری شده استفاده کند صلاحیت جدید
به عنوان مثال ، اگر minSdkVersion
شما روی 4 تنظیم شده است ، و شما با استفاده از حالت شب ( night
یا notnight
، که در سطح 8 API اضافه شده است) تمام منابع قابل ترسیم خود را واجد شرایط می کنید ، پس یک دستگاه API سطح 4 نمی تواند به منابع قابل ترسیم شما دسترسی پیدا کند و تصادف می کند. در این حالت ، شما احتمالاً می خواهید notnight
منابع پیش فرض شما باشد ، بنابراین این صلاحیت را حذف کنید و منابع قابل ترسیم خود را در هر دو drawable/
یا drawable-night/
قرار دهید.
به طور خلاصه ، برای ارائه بهترین سازگاری دستگاه ، همیشه منابع پیش فرض را برای منابعی که برنامه شما برای انجام صحیح انجام می دهد ، تهیه کنید. سپس با استفاده از مرحله مقدماتی پیکربندی ، منابع جایگزین را برای تنظیمات دستگاه خاص ایجاد کنید.
یک استثناء در این قانون وجود دارد: اگر minSdkVersion
برنامه شما 4 یا بیشتر است ، هنگام ارائه منابع قابل ترسیم جایگزین با واجد شرایط بودن چگالی صفحه ، به منابع قابل ترسیم پیش فرض نیاز ندارید . حتی بدون منابع قابل ترسیم پیش فرض ، اندروید می تواند بهترین تطابق را در بین تراکم صفحه جایگزین پیدا کند و در صورت لزوم ، مپ های بیت را مقیاس کند. با این حال ، برای بهترین تجربه در مورد انواع دستگاه ها ، برای هر سه نوع چگالی ، می توانید جایگزین های جایگزین را ارائه دهید.
چگونه Android بهترین منبع تطبیق یافته را پیدا می کند
هنگامی که منبعی را که گزینه های دیگری را برای آن ارائه می دهید درخواست می کنید ، Android بسته به پیکربندی دستگاه فعلی ، کدام منبع جایگزین را برای استفاده در زمان اجرا انتخاب می کند. برای نشان دادن چگونگی انتخاب اندروید یک منبع جایگزین ، فرض کنید که دایرکتوری های قابل ترسیم زیر هر یک شامل نسخه های مختلف از همان تصاویر هستند:
drawable/ drawable-en/ drawable-fr-rCA/ drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/
و فرض کنید موارد زیر پیکربندی دستگاه است:
locale = en-GB
جهت گیری صفحه = port
تراکم پیکسل صفحه = hdpi
نوع صفحه لمسی = notouch
روش ورودی متن اصلی = 12key
Android با مقایسه پیکربندی دستگاه با منابع جایگزین موجود ، Drawables را از drawable-en-port
انتخاب می کند.
این سیستم به تصمیم خود می رسد که منابع لازم برای استفاده با منطق زیر:
![](https://developer.android.com/static/images/resources/res-selection-flowchart.png?authuser=1&hl=fa)
شکل 2. نمودار نمودار چگونگی یافتن Android بهترین منبع تطبیق یافته است.
- پرونده های منابع را که با پیکربندی دستگاه مغایرت دارند حذف کنید.
drawable-fr-rCA/
Directory از بین می رود ، زیرا با محلیen-GB
مغایرت دارد.drawable/ drawable-en/
drawable-fr-rCA/drawable-en-port/ drawable-en-notouch-12key/ drawable-port-ldpi/ drawable-port-notouch-12key/استثنا: تراکم پیکسل صفحه نمایش واجد شرایط است که به دلیل تناقض از بین نمی رود. حتی اگر چگالی صفحه نمایش دستگاه HDPI باشد ،
drawable-port-ldpi/
از بین نمی رود زیرا هر تراکم صفحه در این مرحله یک مسابقه محسوب می شود. برای اطلاعات ، به نمای کلی سازگاری صفحه مراجعه کنید. - در لیست (جدول 2) ، انتخابی مقدماتی برتر را پیدا کنید ( جدول 2 ). (با MCC شروع کنید.)
- آیا هیچ یک از دایرکتوری های منابع شامل این صلاحیت است؟
- اگر خیر ، به مرحله دوم برگردید و به مرحله مقدماتی بعدی نگاه کنید. در این مثال ، پاسخ "نه" است تا زمان رسیدن به صلاحیت زبان.
- اگر بله ، به مرحله چهارم ادامه دهید.
- دایرکتوری های منابع را که شامل این صلاحیت نیست ، حذف کنید. در این مثال ، سیستم بعدی تمام دایرکتوری هایی را که شامل واجد شرایط بودن زبان نیستند ، از بین می برد:
drawable/drawable-en/ drawable-en-port/ drawable-en-notouch-12key/drawable-port-ldpi/drawable-port-notouch-12key/استثنا: اگر صلاحیت مورد نظر چگالی پیکسل صفحه نمایش باشد ، اندروید گزینه ای را انتخاب می کند که از نزدیک با چگالی صفحه دستگاه مطابقت داشته باشد. به طور کلی ، اندروید ترجیح می دهد یک تصویر اصلی بزرگتر را برای مقیاس بندی یک تصویر اصلی کوچکتر کاهش دهد. برای اطلاعات بیشتر ، به نمای کلی سازگاری صفحه مراجعه کنید.
- مراحل دو ، سه و چهار را تکرار کنید تا فقط یک دایرکتوری باقی بماند. در این مثال ، جهت گیری صفحه نمایش مقدماتی بعدی است که برای آن هرگونه مسابقه وجود دارد. بنابراین ، منابعی که جهت گیری صفحه نمایش را مشخص نمی کنند حذف می شوند:
drawable-en/drawable-en-port/drawable-en-notouch-12key/فهرست باقیمانده
drawable-en-port
است.
اگرچه این روش برای هر منبع درخواست شده اجرا می شود ، سیستم برخی از جنبه های آن را بهینه می کند. یکی از این موارد بهینه سازی این است که پس از مشخص شدن پیکربندی دستگاه ، ممکن است منابع جایگزین را که هرگز نمی توانند مطابقت داشته باشند از بین ببرد. به عنوان مثال ، اگر زبان پیکربندی انگلیسی باشد ، آنگاه هر دایرکتوری منبع که دارای یک صلاحیت زبان است که روی چیزی غیر از انگلیسی تنظیم شده است ، هرگز در استخر منابع بررسی شده گنجانده نشده است (هرچند که یک فهرست منابع بدون صلاحیت زبان هنوز هم گنجانده شده است).
هنگام انتخاب منابع بر اساس صلاحیت های اندازه صفحه نمایش ، سیستم در صورت عدم وجود منابع بهتر مطابقت دارد ، از منابعی که برای صفحه نمایش کوچکتر از صفحه نمایش فعلی طراحی شده است ، استفاده می کند. به عنوان مثال ، یک صفحه نمایش با اندازه بزرگ در صورت لزوم از منابع صفحه نمایش با اندازه عادی استفاده می کند.
با این حال ، اگر تنها منابع موجود از صفحه فعلی بزرگتر باشد ، اگر منابع دیگری با پیکربندی دستگاه مطابقت نداشته باشند ، سیستم از آنها استفاده نمی کند و برنامه شما خراب می شود. این اتفاق می افتد ، به عنوان مثال ، اگر تمام منابع چیدمان با صلاحیت xlarge
برچسب گذاری شوند ، اما دستگاه یک صفحه نمایش با اندازه معمولی است.
توجه: تقدم مقدماتی (در جدول 2 ) از تعداد مقدماتی که دقیقاً با دستگاه مطابقت دارند مهمتر است. در مثال قبلی ، در مرحله چهارم آخرین انتخاب در لیست شامل سه مرحله مقدماتی است که دقیقاً با دستگاه مطابقت دارند (جهت گیری ، نوع صفحه لمسی و روش ورودی) ، در حالی که drawable-en
تنها یک پارامتر دارد که مطابقت دارد (زبان). با این حال ، زبان دارای برتری بالاتری نسبت به سایر مقدمات دیگر است ، بنابراین drawable-port-notouch-12key
از بین می رود.