مروری بر منابع برنامه

منابع فایل‌های اضافی و محتوای ثابتی هستند که کد شما از آنها استفاده می‌کند، مانند بیت مپ، تعاریف طرح‌بندی، رشته‌های رابط کاربری، دستورالعمل‌های انیمیشن و غیره.

همیشه منابع برنامه مانند تصاویر و رشته ها را از کد خود بیرونی کنید تا بتوانید آنها را به طور مستقل نگهداری کنید. همچنین، منابع جایگزین را برای پیکربندی‌های دستگاه خاص با گروه‌بندی آن‌ها در فهرست‌های منابع با نام خاص ارائه کنید. در زمان اجرا، اندروید از منبع مناسب بر اساس پیکربندی فعلی استفاده می کند. به عنوان مثال، ممکن است بخواهید یک طرح‌بندی رابط کاربری متفاوت بسته به اندازه صفحه نمایش یا رشته‌های مختلف بسته به تنظیمات زبان ارائه دهید.

هنگامی که منابع برنامه خود را خارجی کردید، می توانید با استفاده از شناسه منابعی که در کلاس 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، .9.png ، JPG یا GIF) یا فایل‌های XML که در زیرگروه‌های منابع قابل ترسیم زیر کامپایل می‌شوند:

  • فایل های بیت مپ
  • نه وصله (بیت مپ های قابل اندازه گیری مجدد)
  • لیست های ایالتی
  • اشکال
  • نقشه های انیمیشن
  • سایر موارد قابل ترسیم

برای اطلاعات بیشتر، به منابع قابل ترسیم مراجعه کنید.

mipmap/ فایل های قابل کشیدن برای تراکم نمادهای مختلف راه اندازی. برای اطلاعات بیشتر در مورد مدیریت نمادهای راه‌انداز با پوشه‌های mipmap/ ، به قرار دادن نمادهای برنامه در فهرست‌های راهنمای mipmap مراجعه کنید.
layout/ فایل های XML که یک طرح رابط کاربری را تعریف می کنند. برای اطلاعات بیشتر، به منبع Layout مراجعه کنید.
menu/ فایل‌های XML که منوی برنامه‌ها را تعریف می‌کنند، مانند منوی گزینه‌ها، منوی زمینه یا منوی فرعی. برای اطلاعات بیشتر، به منبع منو مراجعه کنید.
raw/

فایل های دلخواه برای ذخیره به شکل خام. برای باز کردن این منابع با یک InputStream خام، Resources.openRawResource() را با شناسه منبع، که R.raw. filename .

با این حال، اگر نیاز به دسترسی به نام فایل های اصلی و سلسله مراتب فایل دارید، به جای res/raw/ منابع را در فهرست assets/ فهرست ذخیره کنید. به فایل‌های موجود در assets/ شناسه منبع داده نمی‌شود، بنابراین می‌توانید آنها را فقط با استفاده از AssetManager بخوانید.

values/

فایل های XML که حاوی مقادیر ساده مانند رشته ها، اعداد صحیح و رنگ ها هستند.

در حالی که فایل‌های منبع XML در دیگر دایرکتوری‌های res/ فرعی یک منبع واحد را بر اساس نام فایل XML تعریف می‌کنند، فایل‌های موجود در values/ فهرست منابع متعدد را توصیف می‌کنند. برای یک فایل در این فهرست، هر فرزند عنصر <resources> یک منبع واحد را تعریف می کند. برای مثال، یک عنصر <string> یک منبع R.string و یک عنصر <color> یک منبع R.color ایجاد می کند.

از آنجایی که هر منبع با عنصر XML خاص خود تعریف می شود، می توانید نام فایل را هر چه می خواهید بگذارید و انواع منابع مختلف را در یک فایل قرار دهید. با این حال، برای وضوح، ممکن است بخواهید انواع منابع منحصر به فرد را در فایل های مختلف قرار دهید. به عنوان مثال، در اینجا برخی از قراردادهای نام فایل برای منابعی که می توانید در این فهرست ایجاد کنید آورده شده است:

برای اطلاعات بیشتر، منابع رشته ، منبع سبک ، و انواع منابع بیشتر را ببینید.

xml/ فایل های XML دلخواه که در زمان اجرا با فراخوانی Resources.getXML() قابل خواندن هستند. فایل‌های پیکربندی XML مختلف باید در اینجا ذخیره شوند، مانند پیکربندی جستجو .
font/ فایل‌های فونت با پسوندهایی مانند TTF، OTF، یا TTC، یا فایل‌های XML که شامل عنصر <font-family> هستند. برای اطلاعات بیشتر در مورد فونت ها به عنوان منابع، به افزودن فونت به عنوان منبع XML مراجعه کنید.

احتیاط: هرگز فایل های منبع را مستقیماً در دایرکتوری res/ ذخیره نکنید. باعث خطای کامپایلر می شود.

برای کسب اطلاعات بیشتر در مورد انواع مختلف منابع، به نمای کلی انواع منابع مراجعه کنید.

منابعی که در زیر شاخه های تعریف شده در جدول 1 ذخیره می کنید منابع پیش فرض شما هستند. یعنی این منابع طراحی و محتوای پیش فرض اپلیکیشن شما را تعریف می کنند. با این حال، انواع مختلف دستگاه‌های مجهز به اندروید ممکن است به منابع مختلفی نیاز داشته باشند.

برای مثال، می‌توانید منابع طرح‌بندی متفاوتی را برای دستگاه‌هایی که صفحه‌نمایش بزرگ‌تر از معمولی دارند، فراهم کنید تا از فضای اضافی صفحه‌نمایش استفاده کنید. همچنین می‌توانید منابع رشته‌ای مختلفی را ارائه کنید که متن را در رابط کاربری خود بر اساس تنظیمات زبان دستگاه ترجمه می‌کنند. برای ارائه این منابع مختلف برای پیکربندی‌های مختلف دستگاه، باید علاوه بر منابع پیش‌فرض، منابع جایگزین نیز ارائه دهید.

منابع جایگزین را فراهم کنید

اکثر برنامه ها منابع جایگزینی را برای پشتیبانی از تنظیمات دستگاه خاص ارائه می کنند. به عنوان مثال، منابع قابل ترسیم جایگزین برای تراکم صفحه های مختلف و منابع رشته جایگزین برای زبان های مختلف را شامل شود. در زمان اجرا، Android پیکربندی فعلی دستگاه را شناسایی می کند و منابع مناسب را برای برنامه شما بارگیری می کند.

شکل 1. دو دستگاه با استفاده از منابع طرح بندی مختلف بر اساس اندازه صفحه نمایش.

برای تعیین گزینه های خاص پیکربندی برای مجموعه ای از منابع، موارد زیر را انجام دهید:

  1. یک دایرکتوری جدید در res/ با نام <resources_name> - <qualifier> ایجاد کنید.
    • <resources_name> نام دایرکتوری منابع پیش فرض مربوطه است (تعریف شده در جدول 1).
    • <qualifier> نامی است که پیکربندی فردی را مشخص می کند که این منابع باید برای آن استفاده شوند (تعریف شده در جدول 2).

    شما می توانید بیش از یک <qualifier> را اضافه کنید. هر کدام را با یک خط تیره جدا کنید.

    احتیاط: هنگام ضمیمه کردن چندین واجد شرایط، باید آنها را به همان ترتیبی که در جدول 2 فهرست شده است قرار دهید.

  2. منابع جایگزین مناسب را در این فهرست جدید ذخیره کنید. فایل های منبع باید دقیقاً مانند فایل های منبع پیش فرض نامگذاری شوند.

به عنوان مثال، در اینجا برخی از منابع پیش فرض و جایگزین وجود دارد:

res/
    drawable/
        icon.png
        background.png
    drawable-hdpi/
        icon.png
        background.png

واجد شرایط hdpi نشان می دهد که منابع موجود در آن دایرکتوری برای دستگاه هایی با صفحه نمایش با چگالی بالا هستند. تصاویر موجود در این دایرکتوری‌های قابل ترسیم برای تراکم صفحه‌نمایش خاص اندازه‌گیری می‌شوند، اما نام فایل‌ها دقیقاً یکسان است. به این ترتیب، شناسه منبعی که برای ارجاع به تصویر icon.png یا background.png استفاده می‌کنید همیشه یکسان است. Android با مقایسه اطلاعات پیکربندی دستگاه با واجد شرایط موجود در نام فهرست منابع، نسخه‌ای از هر منبع را انتخاب می‌کند که بهترین تطابق را با دستگاه فعلی دارد.

احتیاط: هنگام تعریف یک منبع جایگزین، مطمئن شوید که منبع را در یک پیکربندی پیش فرض نیز تعریف کرده اید. در غیر این صورت، وقتی دستگاه پیکربندی را تغییر می‌دهد، ممکن است برنامه شما با استثناهای زمان اجرا مواجه شود. به عنوان مثال، اگر یک رشته را فقط به values-en اضافه کنید و نه values ، برنامه شما ممکن است زمانی که کاربر زبان سیستم پیش‌فرض را تغییر می‌دهد با یک استثنای Resource Not Found مواجه شود.

جدول 2 واجد شرایط پیکربندی معتبر را به ترتیب اولویت فهرست می کند. با جدا کردن هر یک از واجد شرایط با یک خط تیره، می‌توانید چندین واجد شرایط را به نام یک فهرست اضافه کنید. اگر از چندین واجد شرایط برای دایرکتوری منبع استفاده می کنید، باید آنها را به ترتیب فهرست شده در جدول به نام دایرکتوری اضافه کنید.

جدول 2. نام های واجد شرایط پیکربندی.

پیکربندی مقادیر واجد شرایط توضیحات
MCC و MNC مثال ها:
mcc310
mcc310-mnc004
mcc208-mnc00

کد کشور تلفن همراه (MCC)، به صورت اختیاری با کد شبکه تلفن همراه (MNC) از سیم کارت موجود در دستگاه. به عنوان مثال، mcc310 ایالات متحده در هر حامل، mcc310-mnc004 ایالات متحده در Verizon، و mcc208-mnc00 فرانسه در Orange است.

اگر دستگاه از اتصال رادیویی استفاده می کند (یعنی یک تلفن GSM است)، مقادیر MCC و MNC از سیم کارت می آیند.

همچنین می توانید از MCC به تنهایی استفاده کنید، به عنوان مثال، برای گنجاندن منابع قانونی خاص کشور در برنامه خود. اگر نیاز به تعیین فقط بر اساس زبان دارید، به جای آن از واجد شرایط زبان، اسکریپت (اختیاری) و منطقه (اختیاری) استفاده کنید. اگر از واجد شرایط MCC و MNC استفاده می کنید، این کار را با احتیاط انجام دهید و آزمایش کنید که همانطور که انتظار می رود کار می کند.

همچنین فیلدهای پیکربندی mcc و mnc را ببینید که به ترتیب کد کشور تلفن همراه فعلی و کد شبکه تلفن همراه را نشان می‌دهند.

زبان، خط (اختیاری) و منطقه (اختیاری) مثال ها:
en
fr
en-rUS
fr-rFR
fr-rCA
b+en
b+en+US
b+es+419
b+zh+Hant
b+sr+Latn+RS

این زبان با یک کد زبان دو حرفی ISO 639-1 ، به صورت اختیاری با یک کد منطقه ای دو حرفی ISO 3166-1-alpha-2 (قبل از حروف کوچک r ) تعریف می شود.

کدها به حروف بزرگ و کوچک حساس نیستند . پیشوند r برای تشخیص بخش منطقه استفاده می شود. شما نمی توانید یک منطقه را به تنهایی مشخص کنید.

Android 7.0 (سطح API 24) از برچسب‌های زبان BCP 47 پشتیبانی می‌کند که می‌توانید از آن برای واجد شرایط بودن منابع خاص زبان و منطقه استفاده کنید. یک تگ زبان از دنباله ای از یک یا چند زیربرچسب تشکیل شده است که هر کدام محدوده زبانی را که توسط تگ کلی مشخص می شود، اصلاح یا محدود می کند. برای اطلاعات بیشتر درباره برچسب‌های زبان، به برچسب‌هایی برای شناسایی زبان‌ها مراجعه کنید.

برای استفاده از یک تگ زبان BCP 47، b+ و کد زبان ISO 639-1 دو حرفی را به هم الحاق کنید و به‌صورت اختیاری، زیربرچسب‌های اضافی را با علامت + از هم جدا کنید.

اگر کاربران زبان خود را در تنظیمات سیستم تغییر دهند، برچسب زبان می تواند در طول عمر برنامه شما تغییر کند. برای اطلاعات در مورد اینکه چگونه این می تواند برنامه شما را در طول زمان اجرا تحت تاثیر قرار دهد، به کنترل تغییرات پیکربندی مراجعه کنید.

برای یک راهنمای کامل برای بومی سازی برنامه خود برای زبان های دیگر، به محلی سازی برنامه خود مراجعه کنید.

همچنین متد getLocales() را ببینید که لیست تعریف شده از مناطق را ارائه می دهد. این لیست شامل محل اصلی است.

جهت چیدمان ldrtl
ldltr

جهت چیدمان برنامه شما. ldrtl به معنای "طرح-جهت-راست به چپ" است. ldltr به معنی "layout-direction-left-to-right" است و مقدار ضمنی پیش فرض است.

این می‌تواند برای هر منبعی مانند طرح‌بندی‌ها، نقشه‌ها یا مقادیر اعمال شود.

برای مثال، اگر می‌خواهید یک طرح‌بندی خاص برای زبان عربی و یک طرح کلی برای هر زبان «راست به چپ» دیگر، مانند فارسی یا عبری، ارائه دهید، از دایرکتوری‌هایی مانند زیر استفاده می‌کنید:

res/
layout/
main.xml (طرح بندی پیش فرض)
layout-ar/
main.xml (طرح بندی خاص برای عربی)
layout-ldrtl/
main.xml (هر زبان راست به چپ به جز زبان عربی، زیرا واجد شرایط زبان "ar" اولویت بیشتری دارد)

توجه: برای فعال کردن ویژگی های چیدمان راست به چپ برای برنامه خود، باید SupportsRtl روی "true" تنظیم کنید و TargetSdkVersion روی 17 یا بالاتر تنظیم کنید.

در سطح 17 API اضافه شد.

کوچکترین عرض sw<N>dp

مثال ها:
sw320dp
sw600dp
sw720dp
و غیره

کوتاه‌ترین بعد صفحه نمایش در دسترس یک برنامه. به طور خاص، smallestWidth پنجره برنامه، کوتاهترین ارتفاع و عرض پنجره است. شما همچنین می توانید آن را به عنوان "کوچکترین عرض ممکن" برای پنجره در نظر بگیرید. می توانید از این واجد شرایط استفاده کنید تا برنامه شما حداقل <N> dps عرض برای رابط کاربری خود داشته باشد.

به عنوان مثال، اگر چیدمان شما مستلزم این است که کوچکترین بعد مساحت صفحه آن همیشه حداقل 600 dp باشد، می‌توانید از این واجد شرایط برای ایجاد منابع طرح‌بندی در دایرکتوری res/layout-sw600dp/ استفاده کنید. این سیستم تنها زمانی از این منابع استفاده می‌کند که کوچک‌ترین بعد صفحه نمایش موجود حداقل 600 dp باشد، صرف نظر از اینکه سمت 600 dp ارتفاع یا عرض درک شده توسط کاربر باشد. در صورت تغییر اندازه پنجره، تغییر عرض/ارتفاع موجود، یا تغییر موقعیت، و به طور بالقوه تغییر در ورودی های سیستم، کوچکترین عرض می تواند تغییر کند.

استفاده از کوچکترین عرض برای تعیین اندازه کلی صفحه نمایش مفید است زیرا عرض اغلب عامل محرک در طراحی یک چیدمان است. یک UI اغلب به صورت عمودی پیمایش می کند، اما محدودیت های نسبتاً سختی در حداقل فضایی که به صورت افقی نیاز دارد، دارد.

عرض موجود همچنین عامل کلیدی در تعیین اینکه آیا از طرح بندی یک جداره برای گوشی ها استفاده شود یا از طرح چند صفحه ای برای تبلت ها است. بنابراین، شما احتمالاً بیشترین اهمیت را به کمترین عرض ممکن در هر دستگاه دارید.

کوچکترین عرض یک دستگاه، تزئینات صفحه نمایش و رابط کاربری سیستم را در نظر می گیرد. به عنوان مثال، اگر دستگاه دارای عناصر رابط کاربری دائمی بر روی صفحه باشد که فضایی را در امتداد محور کوچکترین عرض به حساب می آورند، سیستم کوچکترین عرض را کوچکتر از اندازه واقعی صفحه نمایش اعلام می کند، زیرا اینها پیکسل های صفحه نمایش هستند که برای رابط کاربری شما در دسترس نیستند. .

برخی از مقادیری که ممکن است در اینجا برای اندازه های معمول صفحه نمایش استفاده کنید:

  • 320، برای دستگاه هایی با تنظیمات صفحه نمایش مانند:
    • 240x320 ldpi (دستگاه QVGA)
    • 320x480 mdpi (دستگاه)
    • 480x800 hdpi (دستگاه با چگالی بالا)
  • 480، برای نمایشگرهایی مانند 480x800 mdpi (تبلت/دستگاه)
  • 600، برای نمایشگرهایی مانند تبلت 7 اینچی 600x1024 mdpi
  • 720، برای صفحه نمایش هایی مانند 720x1280 mdpi (تبلت 10 اینچی)

هنگامی که برنامه شما چندین دایرکتوری منبع را با مقادیر مختلف برای واجد شرایط smallestWidth ارائه می‌کند، سیستم از نزدیک‌ترین دایرکتوری به smallestWidth دستگاه (بدون فراتر از) استفاده می‌کند.

در سطح API 13 اضافه شده است.

همچنین ویژگی android:requiresSmallestWidthDp را ببینید، که حداقل smallestWidth که برنامه شما با آن سازگار است، و فیلد پیکربندی smallestScreenWidthDp را که مقدار smallestWidth دستگاه را در خود دارد، اعلام می کند.

برای اطلاعات بیشتر در مورد طراحی برای صفحه‌های مختلف با استفاده از این واجد شرایط، به طراحی واکنش‌گرا/تطبیقی ​​با نماها مراجعه کنید.

عرض و ارتفاع موجود w<N>dp
h<N>dp

مثال ها:
w720dp
w1024dp
h720dp
h1024dp
و غیره

حداقل عرض یا ارتفاع صفحه نمایش (بر حسب واحدهای dp تعریف شده با مقدار <N> ) که در آن منبع استفاده می شود را مشخص می کند. این مقادیر پیکربندی با عرض و ارتفاع نمایش فعلی مقایسه می‌شوند، زیرا جهت دستگاه بین عمودی و افقی تغییر می‌کند، دستگاه تا می‌شود یا باز می‌شود، یا سیستم وارد یا خارج می‌شود حالت چند پنجره‌ای. در حالت چند پنجره ای، مقادیر عرض و ارتفاع پنجره حاوی برنامه را نشان می دهند، نه عرض و ارتفاع صفحه نمایش دستگاه. به طور مشابه، برای فعالیت های جاسازی شده، مقادیر مربوط به عرض و ارتفاع فعالیت های فردی است، نه عرض و ارتفاع صفحه. برای اطلاعات بیشتر، به جاسازی فعالیت مراجعه کنید.

عرض و ارتفاع موجود اغلب برای تعیین اینکه آیا از طرح‌بندی چند صفحه‌ای استفاده شود مفید است، زیرا حتی در یک دستگاه تبلت، اغلب نمی‌خواهید همان طرح چند صفحه‌ای را برای جهت‌گیری عمودی مانند منظره دارید. بنابراین، می‌توانید از اینها برای تعیین حداقل عرض و/یا ارتفاع مورد نیاز برای چیدمان استفاده کنید، به‌جای استفاده از معیارهای اندازه صفحه و جهت‌گیری با هم.

هنگامی که برنامه شما چندین فهرست منبع با مقادیر مختلف برای این پیکربندی ها ارائه می دهد، سیستم از نزدیک ترین دایرکتوری به (بدون فراتر رفتن) عرض صفحه نمایش فعلی دستگاه استفاده می کند. نزدیکترین به با اضافه کردن تفاوت بین عرض واقعی صفحه نمایش و عرض مشخص شده به اختلاف بین ارتفاع واقعی صفحه نمایش و ارتفاع مشخص شده تعیین می شود، با ارتفاع و عرض نامشخص دارای مقدار 0.

مقادیر مساحت اشغال شده توسط Insets Window را حذف نمی‌کنند، بنابراین اگر دستگاه دارای عناصر رابط کاربری دائمی در لبه‌های نمایشگر باشد، مقادیر عرض و ارتفاع از ابعاد واقعی صفحه کوچک‌تر است، حتی زمانی که برنامه لبه به لبه با استفاده از Window.setDecorFitsSystemWindows نمایش داده می‌شود. Window.setDecorFitsSystemWindows یا WindowCompat.setDecorFitsSystemWindows .

برخی از تزئینات عمودی صفحه که ثابت نیستند (مانند نوار وضعیت تلفن که می‌تواند در حالت تمام صفحه پنهان شود) در اینجا در نظر گرفته نمی‌شوند ، همچنین تزئینات پنجره مانند نوار عنوان یا نوار عمل وجود ندارد، بنابراین برنامه‌ها باید برای مقابله با آن‌ها آماده باشند. فضای کمی کوچکتر از آنچه آنها مشخص می کنند.

توجه: سیستم منبعی را انتخاب می کند که هم از نظر عرض و هم از نظر ارتفاع مطابقت داشته باشد. بنابراین منبعی که هر دو را مشخص می‌کند به شدت بر منبعی که فقط یکی یا دیگری را مشخص می‌کند ترجیح داده می‌شود. به عنوان مثال، اگر صفحه نمایش واقعی 720 dp عرض در 1280 dp بالا باشد و یک منبع با w720dp و منبع دیگر به عنوان w700dp-h1200dp واجد شرایط باشد، دومی انتخاب می شود حتی اگر اولی دقیقاً مطابق با آنچه مشخص می شود باشد.

در سطح API 13 اضافه شده است.

همچنین فیلدهای پیکربندی screenWidthDp و screenHeightDp را ببینید که عرض و ارتفاع فعلی صفحه را نگه می‌دارند.

برای اطلاعات بیشتر در مورد طراحی برای صفحه‌های مختلف با استفاده از این واجد شرایط، به طراحی واکنش‌گرا/تطبیقی ​​با نماها مراجعه کنید.

اندازه صفحه نمایش small
normal
large
xlarge
  • small : صفحه نمایش هایی که اندازه ای مشابه با صفحه نمایش QVGA با چگالی پایین دارند. حداقل اندازه چیدمان برای یک صفحه نمایش کوچک تقریباً 320x426 dp واحد است. به عنوان مثال می توان به چگالی کم QVGA و چگالی بالا VGA اشاره کرد.
  • normal : صفحه نمایش هایی که اندازه ای مشابه با صفحه نمایش HVGA با چگالی متوسط ​​دارند. حداقل اندازه چیدمان برای یک صفحه نمایش معمولی تقریباً 320x470 dp واحد است. نمونه هایی از این صفحه نمایش ها عبارتند از: WQVGA کم چگالی، HVGA متوسط ​​چگالی و WVGA چگالی بالا.
  • large : صفحه‌نمایش‌هایی که اندازه‌ای مشابه با صفحه‌نمایش VGA با چگالی متوسط ​​دارند. حداقل اندازه چیدمان برای یک صفحه نمایش بزرگ تقریباً واحدهای 480x640 dp است. به عنوان مثال می توان به صفحه نمایش های با چگالی متوسط ​​VGA و WVGA اشاره کرد.
  • xlarge : صفحه نمایش هایی که به طور قابل توجهی بزرگتر از صفحه نمایش سنتی HVGA با چگالی متوسط ​​هستند. حداقل اندازه چیدمان برای یک صفحه نمایش xlarge تقریباً واحدهای 720x960 dp است. در بیشتر موارد، دستگاه هایی با صفحه نمایش بسیار بزرگ برای حمل در جیب بیش از حد بزرگ هستند و به احتمال زیاد دستگاه هایی به سبک تبلت هستند. در سطح 9 API اضافه شده است.

توجه: استفاده از واجد شرایط اندازه به این معنی نیست که منابع فقط برای صفحه نمایش هایی با آن اندازه هستند. اگر منابع جایگزین را با واجد شرایطی که بهتر با پیکربندی دستگاه فعلی مطابقت دارند ارائه نکنید، سیستم می‌تواند از منابعی که بهترین منطبق هستند استفاده کند.

احتیاط: اگر همه منابع شما از یک واجد شرایط اندازه استفاده می کنند که بزرگتر از صفحه فعلی است، سیستم از آنها استفاده نمی کند و برنامه شما در زمان اجرا خراب می شود. این اتفاق می‌افتد، برای مثال، اگر همه منابع طرح‌بندی با واجد شرایط xlarge برچسب‌گذاری شده باشند اما دستگاه دارای یک صفحه نمایش با اندازه معمولی باشد.

در سطح 4 API اضافه شده است.

همچنین قسمت پیکربندی screenLayout را ببینید که نشان می دهد صفحه نمایش کوچک، معمولی یا بزرگ است.

برای اطلاعات بیشتر، به نمای کلی سازگاری صفحه مراجعه کنید.

جنبه صفحه نمایش long
notlong
  • long : صفحه نمایش های طولانی مانند WQVGA، WVGA، FWVGA
  • notlong : صفحه های نه طولانی مانند QVGA، HVGA و VGA

در سطح 4 API اضافه شده است.

این صرفاً بر اساس نسبت ابعاد صفحه نمایش است (صفحه نمایش long عریض تر است). این به جهت صفحه نمایش مربوط نمی شود.

همچنین فیلد پیکربندی screenLayout را ببینید که نشان می دهد صفحه نمایش طولانی است یا خیر.

صفحه گرد round
notround
  • round : صفحه های گرد، مانند یک دستگاه پوشیدنی گرد
  • notround : صفحه نمایش مستطیلی مانند تلفن یا تبلت

در سطح 23 API اضافه شده است.

همچنین روش پیکربندی isScreenRound() را ببینید که نشان می دهد صفحه گرد است یا خیر.

وسعت رنگ گسترده widecg
nowidecg
  • widecg : نمایشگرهایی با طیف رنگی گسترده مانند Display P3 یا AdobeRGB
  • nowidecg : نمایش هایی با طیف رنگی باریک مانند sRGB

در سطح 26 API اضافه شد.

همچنین روش پیکربندی isScreenWideColorGamut() را ببینید که نشان می‌دهد صفحه نمایش دارای طیف رنگی گسترده است یا خیر.

محدوده دینامیکی بالا (HDR) highdr
lowdr
  • highdr : نمایشگرهایی با محدوده دینامیکی بالا
  • lowdr : نمایشگرهایی با محدوده دینامیکی پایین/استاندارد

در سطح 26 API اضافه شد.

همچنین روش پیکربندی isScreenHdr() را ببینید که نشان می دهد صفحه نمایش قابلیت HDR دارد یا خیر.

جهت صفحه نمایش port
land
  • port : دستگاه در جهت عمودی است (عمودی)
  • land : دستگاه در جهت افقی است (افقی)

اگر کاربر صفحه را بچرخاند، این می تواند در طول عمر برنامه شما تغییر کند. برای اطلاعات در مورد اینکه چگونه این مورد بر برنامه شما در طول زمان اجرا تأثیر می گذارد، به کنترل تغییرات پیکربندی مراجعه کنید.

همچنین فیلد پیکربندی orientation را ببینید که جهت گیری فعلی دستگاه را نشان می دهد.

حالت رابط کاربری car
desk
television
appliance
watch
vrheadset
  • car : دستگاه در حوض خودرو نمایش داده می شود
  • desk : دستگاه در حوض میز نمایش داده می شود
  • television : دستگاه در تلویزیون نمایش داده می شود و تجربه ای "ده فوتی" را ارائه می دهد که در آن رابط کاربری آن بر روی صفحه نمایش بزرگی قرار دارد که کاربر از آن دور است، و این تجربه عمدتا حول محور D-pad یا سایر تعاملات غیر اشاره گر است.
  • appliance : دستگاه بدون نمایشگر به عنوان یک دستگاه کار می کند
  • watch : دستگاه دارای نمایشگر است و روی مچ بسته می شود
  • vrheadset : دستگاه در یک هدست واقعیت مجازی نمایش داده می شود

اضافه شده در API سطح 8. تلویزیون اضافه شده در API 13. ساعت اضافه شده در API 20.

برای اطلاعاتی در مورد اینکه برنامه شما چگونه می‌تواند هنگام قرار دادن یا برداشتن دستگاه در یک پایه، پاسخ دهد، وضعیت اتصال را تعیین و نظارت کنید و تایپ کنید .

اگر کاربر دستگاه را در یک داک قرار دهد، ممکن است در طول عمر برنامه شما تغییر کند. می توانید برخی از این حالت ها را با استفاده از UiModeManager فعال یا غیرفعال کنید. برای اطلاعات در مورد اینکه چگونه این مورد بر برنامه شما در طول زمان اجرا تأثیر می گذارد، به کنترل تغییرات پیکربندی مراجعه کنید.

حالت شب night
notnight
  • night : وقت شب
  • notnight : به وقت روز

در سطح 8 API اضافه شده است.

اگر حالت شب در حالت خودکار (پیش‌فرض) باقی بماند، این می‌تواند در طول عمر برنامه شما تغییر کند، در این صورت حالت بر اساس زمان روز تغییر می‌کند. می توانید این حالت را با استفاده از UiModeManager فعال یا غیرفعال کنید. برای اطلاعات در مورد اینکه چگونه این مورد بر برنامه شما در طول زمان اجرا تأثیر می گذارد، به کنترل تغییرات پیکربندی مراجعه کنید.

تراکم پیکسلی صفحه نمایش (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
nnn dpi
  • ldpi : صفحه نمایش با چگالی کم. تقریبا 120 dpi
  • mdpi : صفحه نمایش با چگالی متوسط ​​(در HVGA سنتی). تقریبا 160 dpi
  • hdpi : صفحه نمایش با چگالی بالا؛ تقریبا 240 نقطه در اینچ
  • xhdpi : صفحه نمایش با چگالی فوق العاده بالا. تقریبا 320 نقطه در اینچ در سطح 8 API اضافه شده است.
  • xxhdpi : صفحه نمایش فوق العاده با چگالی بالا. تقریبا 480 dpi در سطح 16 API اضافه شد.
  • xxxhdpi : کاربردهای فوق العاده فوق العاده با چگالی بالا (فقط نماد راه انداز—به پشتیبانی از تراکم پیکسل های مختلف مراجعه کنید). تقریبا 640 نقطه در اینچ در سطح 18 API اضافه شده است.
  • nodpi : برای منابع بیت مپ استفاده می‌شود که نمی‌خواهید مقیاس آن‌ها مطابق با چگالی دستگاه باشد.
  • tvdpi : صفحه نمایش جایی بین mdpi و hdpi. تقریبا 213 نقطه در اینچ این یک گروه چگالی "اولیه" در نظر گرفته نمی شود. این بیشتر برای تلویزیون های 720p در نظر گرفته شده است و اکثر برنامه ها به آن نیازی ندارند. برای پنل های تلویزیون 1080p از xhdpi و برای پنل های تلویزیون 4K از xxxhdpi استفاده کنید. در سطح API 13 اضافه شده است.
  • anydpi : با تمام تراکم های صفحه مطابقت دارد و بر سایر واجد شرایط اولویت دارد. این برای ترسیم‌های برداری مفید است. در سطح 21 API اضافه شد.
  • nnn dpi : برای نمایش چگالی های غیر استاندارد استفاده می شود، که در آن nnn تراکم صفحه نمایش عدد صحیح مثبت است. این در اکثر موارد استفاده نمی شود. استفاده از سطل‌های چگالی استاندارد، هزینه‌های سربار پشتیبانی از تراکم‌های صفحه نمایش دستگاه‌های مختلف در بازار را تا حد زیادی کاهش می‌دهد.

یک نسبت مقیاس بندی 3:4:6:8:12:16 بین شش چگالی اولیه وجود دارد (بدون توجه به چگالی tvdpi). بنابراین، یک بیت مپ 9x9 در ldpi 12x12 در mdpi، 18x18 در hdpi، 24x24 در xhdpi و غیره است.

توجه: استفاده از واجد شرایط چگالی به این معنی نیست که منابع فقط برای صفحه‌هایی با آن چگالی هستند. اگر منابع جایگزین با واجد شرایطی که بهتر با پیکربندی دستگاه فعلی مطابقت دارند ارائه نکنید، سیستم از منابعی که بهترین منطبق هستند استفاده می کند.

برای اطلاعات بیشتر در مورد نحوه مدیریت تراکم‌های مختلف صفحه و اینکه چگونه Android ممکن است بیت مپ‌های شما را متناسب با چگالی فعلی مقیاس کند، به نمای کلی سازگاری صفحه رجوع کنید.

نوع صفحه نمایش لمسی notouch
finger
  • notouch : دستگاه صفحه نمایش لمسی ندارد.
  • finger : دستگاه دارای یک صفحه نمایش لمسی است که برای استفاده از طریق تعامل جهت انگشت کاربر در نظر گرفته شده است.

همچنین قسمت پیکربندی touchscreen را که نشان دهنده نوع صفحه لمسی دستگاه است، مشاهده کنید.

در دسترس بودن صفحه کلید keysexposed
keyshidden
keyssoft
  • keysexposed : دستگاه دارای یک صفحه کلید در دسترس است. اگر صفحه‌کلید نرم‌افزاری دستگاه فعال باشد (که احتمال دارد)، این صفحه‌کلید حتی زمانی که صفحه‌کلید سخت‌افزاری در معرض کاربر قرار نمی‌گیرد یا زمانی که دستگاه صفحه‌کلید سخت‌افزاری ندارد، استفاده می‌شود. اگر صفحه‌کلید نرم‌افزاری ارائه نشده است یا غیرفعال است، این صفحه‌کلید فقط زمانی استفاده می‌شود که صفحه‌کلید سخت‌افزاری در معرض دید قرار گیرد.
  • keyshidden : دستگاه دارای یک صفحه کلید سخت افزاری در دسترس است اما پنهان است و دستگاه صفحه کلید نرم افزاری فعال ندارد .
  • keyssoft : دستگاه دارای صفحه کلید نرم افزاری فعال است، خواه قابل مشاهده باشد یا نباشد.

اگر منابع keysexposed ارائه کنید، اما منابع keyssoft ارائه نکنید، سیستم بدون توجه به اینکه صفحه کلید قابل مشاهده است، از منابع keysexposed استفاده می کند، تا زمانی که سیستم صفحه کلید نرم افزاری فعال داشته باشد.

اگر کاربر صفحه کلید سخت افزاری را باز کند، این می تواند در طول عمر برنامه شما تغییر کند. برای اطلاعات در مورد اینکه چگونه این مورد بر برنامه شما در طول زمان اجرا تأثیر می گذارد، به کنترل تغییرات پیکربندی مراجعه کنید.

همچنین فیلدهای پیکربندی hardKeyboardHidden و keyboardHidden را ببینید که به ترتیب نمایان بودن صفحه کلید سخت افزاری و قابل مشاهده بودن هر نوع صفحه کلید (از جمله نرم افزار) را نشان می دهند.

روش ورودی متن اصلی nokeys
qwerty
12key
  • nokeys : دستگاه هیچ کلید سخت افزاری برای ورودی متن ندارد.
  • qwerty : دستگاه دارای صفحه کلید QWERTY سخت افزاری است، خواه برای کاربر قابل مشاهده باشد یا نباشد.
  • 12key : دستگاه دارای یک صفحه کلید 12 کلیدی سخت افزاری است، خواه برای کاربر قابل مشاهده باشد یا خیر.

همچنین فیلد پیکربندی keyboard را ببینید که روش ورودی متن اصلی موجود را نشان می دهد.

نسخه پلتفرم (سطح API) مثال ها:
v3
v4
v7
و غیره

سطح API پشتیبانی شده توسط دستگاه. به عنوان مثال، v1 برای API سطح 1 (دستگاه‌های دارای Android 1.0 یا بالاتر) و v4 برای API سطح 4 (دستگاه‌هایی با Android 1.6 یا بالاتر). برای اطلاعات بیشتر در مورد این مقادیر، به سند سطوح Android 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 انتخاب می کند.

این سیستم به تصمیم خود می رسد که منابع لازم برای استفاده با منطق زیر:

شکل 2. نمودار نمودار چگونگی یافتن Android بهترین منبع تطبیق یافته است.

  1. پرونده های منابع را که با پیکربندی دستگاه مغایرت دارند حذف کنید.

    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) ، انتخابی مقدماتی برتر را پیدا کنید ( جدول 2 ). (با MCC شروع کنید.)
  3. آیا هیچ یک از دایرکتوری های منابع شامل این صلاحیت است؟
    • اگر خیر ، به مرحله دوم برگردید و به مرحله مقدماتی بعدی نگاه کنید. در این مثال ، پاسخ "نه" است تا زمان رسیدن به صلاحیت زبان.
    • اگر بله ، به مرحله چهارم ادامه دهید.
  4. دایرکتوری های منابع را که شامل این صلاحیت نیست ، حذف کنید. در این مثال ، سیستم بعدی تمام دایرکتوری هایی را که شامل واجد شرایط بودن زبان نیستند ، از بین می برد:
    drawable/
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    drawable-port-ldpi/
    drawable-port-notouch-12key/
    

    استثنا: اگر صلاحیت مورد نظر چگالی پیکسل صفحه نمایش باشد ، اندروید گزینه ای را انتخاب می کند که از نزدیک با چگالی صفحه دستگاه مطابقت داشته باشد. به طور کلی ، اندروید ترجیح می دهد یک تصویر اصلی بزرگتر را برای مقیاس بندی یک تصویر اصلی کوچکتر کاهش دهد. برای اطلاعات بیشتر ، به نمای کلی سازگاری صفحه مراجعه کنید.

  5. مراحل دو ، سه و چهار را تکرار کنید تا فقط یک دایرکتوری باقی بماند. در این مثال ، جهت گیری صفحه نمایش مقدماتی بعدی است که برای آن هرگونه مسابقه وجود دارد. بنابراین ، منابعی که جهت گیری صفحه نمایش را مشخص نمی کنند حذف می شوند:
    drawable-en/
    drawable-en-port/
    drawable-en-notouch-12key/
    

    فهرست باقیمانده drawable-en-port است.

اگرچه این روش برای هر منبع درخواست شده اجرا می شود ، سیستم برخی از جنبه های آن را بهینه می کند. یکی از این موارد بهینه سازی این است که پس از مشخص شدن پیکربندی دستگاه ، ممکن است منابع جایگزین را که هرگز نمی توانند مطابقت داشته باشند از بین ببرد. به عنوان مثال ، اگر زبان پیکربندی انگلیسی باشد ، آنگاه هر دایرکتوری منبع که دارای یک صلاحیت زبان است که روی چیزی غیر از انگلیسی تنظیم شده است ، هرگز در استخر منابع بررسی شده گنجانده نشده است (هرچند که یک فهرست منابع بدون صلاحیت زبان هنوز هم گنجانده شده است).

هنگام انتخاب منابع بر اساس صلاحیت های اندازه صفحه نمایش ، سیستم در صورت عدم وجود منابع بهتر مطابقت دارد ، از منابعی که برای صفحه نمایش کوچکتر از صفحه نمایش فعلی طراحی شده است ، استفاده می کند. به عنوان مثال ، یک صفحه نمایش با اندازه بزرگ در صورت لزوم از منابع صفحه نمایش با اندازه عادی استفاده می کند.

با این حال ، اگر تنها منابع موجود از صفحه فعلی بزرگتر باشد ، اگر منابع دیگری با پیکربندی دستگاه مطابقت نداشته باشند ، سیستم از آنها استفاده نمی کند و برنامه شما خراب می شود. این اتفاق می افتد ، به عنوان مثال ، اگر تمام منابع چیدمان با صلاحیت xlarge برچسب گذاری شوند ، اما دستگاه یک صفحه نمایش با اندازه معمولی است.

توجه: تقدم مقدماتی (در جدول 2 ) از تعداد مقدماتی که دقیقاً با دستگاه مطابقت دارند مهمتر است. در مثال قبلی ، در مرحله چهارم آخرین انتخاب در لیست شامل سه مرحله مقدماتی است که دقیقاً با دستگاه مطابقت دارند (جهت گیری ، نوع صفحه لمسی و روش ورودی) ، در حالی که drawable-en تنها یک پارامتر دارد که مطابقت دارد (زبان). با این حال ، زبان دارای برتری بالاتری نسبت به سایر مقدمات دیگر است ، بنابراین drawable-port-notouch-12key از بین می رود.