نمای کلی منابع برنامه

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

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

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

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

هر نوع منبع را در زیرفهرست راهنمای خاصی از فهرست راهنمای res/ پروژه‌تان قرار دهید. برای مثال، در اینجا سلسله‌مراتب فایل برای یک پروژه ساده آورده شده است:

MyProject/
    src/
        MyActivity.kt
    res/
        drawable/
            graphic.png
        mipmap/
            icon.png
        values/
            strings.xml

فهرست راهنمای res/ شامل همه منابع در زیرفهرست‌های راهنمای آن است: یک منبع تصویر، یک فهرست راهنمای mipmap/ برای نمادهای راه‌انداز، و یک فایل منبع رشته. نام‌های فهرست راهنمای منبع مهم هستند و در جدول ۱ شرح داده شده‌اند.

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

جدول ۱. فهرست‌های راهنمای منبع در فهرست راهنمای پروژه res/ پشتیبانی می‌شود.

فهرست راهنما نوع منبع
drawable/

فایل‌های Bitmap (PNG،‏ .9.png،‏ JPG، یا GIF) یا فایل‌های XML که در زیرنوع‌های منبع ترسیم‌شدنی زیر کامپایل شده‌اند:

  • فایل‌های بیت‌مپ
  • Nine-patches (نقشه‌های بیتی با قابلیت تغییر اندازه)
  • فهرست‌های ایالتی
  • شکل‌ها
  • ترسیم‌پذیرهای پویانمایی
  • سایر موارد قابل‌ترسیم

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

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

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

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

values/

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

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

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

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

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

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

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

برای مثال، می‌توانید منابع رشته‌ای متفاوتی ارائه دهید که نوشتار را در میانای کاربر براساس تنظیمات زبان دستگاه ترجمه کند.

توجه: در Compose، رابط‌های کاربری، پویانمایی‌ها، و رنگ‌های مبتنی بر وضعیت در Kotlin اعلام می‌شوند، بنابراین دایرکتوری‌های layout/،‏ menu/،‏ anim/،‏ animator/، و color/ برای برنامه‌های مدرن منسوخ شده‌اند. برای اطلاعات بیشتر، به پویانمایی‌ها در Compose و آناتومی طرح زمینه در Compose مراجعه کنید.

ارائه منابع جایگزین

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

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

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

    می‌توانید بیش‌از یک <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 مواجه شود.

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

جدول ۲. نام‌های توصیف‌گر پیکربندی.

پیکربندی مقادیر توصیف‌گر شرح
کد کشور موبایل و کد شبکه تلفن همراه مثال‌ها:
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 (سطح میانای برنامه‌سازی کاربردی ۲۴) پشتیبانی از برچسب‌های زبان BCP 47 را معرفی کرد که می‌توانید از آن برای واجدشرایط کردن منابع مختص زبان و منطقه استفاده کنید. برچسب زبان از توالی یک یا چند برچسب فرعی تشکیل شده است که هرکدام از آن‌ها محدوده زبان شناسایی‌شده توسط برچسب کلی را اصلاح یا محدود می‌کند. برای اطلاعات بیشتر درباره برچسب‌های زبان، به برچسب‌های شناسایی زبان مراجعه کنید.

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

اگر کاربران زبانشان را در تنظیمات سیستم تغییر دهند، برچسب زبان می‌تواند درطول عمر برنامه‌تان تغییر کند. برای اطلاعات درباره اینکه این موضوع چگونه می‌تواند بر برنامه‌تان درطول زمان اجرا تأثیر بگذارد، به مدیریت تغییرات پیکربندی مراجعه کنید.

برای راهنمای کامل بومی‌سازی برنامه‌تان برای زبان‌های دیگر، بومی‌سازی برنامه را ببینید.

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

جنسیت دستوری masculine
feminine
neuter

جنسیت دستوری کاربر. برای زبان‌هایی که جنسیت دستوری دارند استفاده می‌شود.

برای مثال، اگر لازم است منابع متفاوتی برای کاربران فرانسوی‌زبان ارائه دهید، می‌توانید از دایرکتوری‌هایی مانند موارد زیر استفاده کنید:

‫res/
  values-fr/
    strings.xml (رشته‌های پیش‌فرض با جنسیت نامشخص)
  values-fr-masculine/
    strings.xml (رشته‌های با جنسیت مذکر)
  values-fr-feminine/
    strings.xml (رشته‌های با جنسیت مؤنث)
  values-fr-neuter/
    strings.xml (رشته‌های با جنسیت خنثی)

به شخصی‌سازی کردن واسط کاربر برنامه با جنسیت دستوری مراجعه کنید.

همچنین روش پیکربندی getGrammaticalGender را ببینید که جنسیت دستوری را نشان می‌دهد.

در سطح ای‌پی‌آی ۳۴ اضافه شده است.

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

در سطح ۲۶ میانای برنامه‌سازی کاربردی اضافه شده است.

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

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

در سطح ۲۶ میانای برنامه‌سازی کاربردی اضافه شده است.

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

حالت واسط کاربر car
desk
television
appliance
watch
vrheadset
  • car: دستگاه در پایه اتصال در خودرو نمایش داده می‌شود
  • ‫desk: دستگاه در جایگاه رومیزی نمایش داده می‌شود
  • television: دستگاه در تلویزیون نمایش داده می‌شود و تجربه «ده فوتی» ارائه می‌دهد که در آن واسط کاربر روی صفحه‌نمایش بزرگی است که کاربر از آن دور است و تجربه در درجه اول حول پد کنترل یا سایر تعامل‌های غیرنشانگری است
  • appliance: دستگاه به‌عنوان وسیله‌ای بدون نمایشگر عمل می‌کند
  • ‫watch: دستگاه نمایشگر دارد و روی مچ بسته می‌شود
  • vrheadset: دستگاه در هدست واقعیت مجازی نمایش داده می‌شود

در سطح میانای برنامه‌سازی کاربردی ۸ اضافه شد؛ تلویزیون در میانای برنامه‌سازی کاربردی ۱۳ اضافه شد؛ لوازم خانگی در میانای برنامه‌سازی کاربردی ۱۶ اضافه شد؛ ساعت در میانای برنامه‌سازی کاربردی ۲۰ اضافه شد؛ هدست واقعیت مجازی در میانای برنامه‌سازی کاربردی ۲۶ اضافه شد.

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

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

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

در سطح میانای برنامه‌سازی کاربردی ۸ اضافه شده است.

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

تراکم پیکسل صفحه‌نمایش (dpi) ldpi
mdpi
hdpi
xhdpi
xxhdpi
xxxhdpi
nodpi
tvdpi
anydpi
nnndpi
  • ldpi: صفحه‌نمایش‌های با تراکم پایین؛ تقریباً ۱۲۰ نقطه در اینچ.
  • mdpi: صفحه‌نمایش‌های با تراکم متوسط (در HVGA سنتی)؛ تقریباً ۱۶۰ نقطه در اینچ.
  • ‫hdpi: صفحه‌های تراکم بالا؛ تقریباً ۲۴۰ نقطه در اینچ.
  • xhdpi: صفحه‌های با تراکم بسیار بالا؛ تقریباً ۳۲۰ نقطه در اینچ. در سطح ۸ API اضافه شده است.
  • xxhdpi: صفحه‌های با تراکم بسیار بسیار بالا؛ تقریباً ۴۸۰ نقطه در اینچ. در سطح API ۱۶ اضافه شده است.
  • xxxhdpi: استفاده‌های با تراکم بسیار بسیار بسیار بالا (فقط نماد راه‌انداز—به پشتیبانی از تراکم‌های پیکسلی مختلف مراجعه کنید)؛ تقریباً ۶۴۰ نقطه در اینچ. در سطح میانای برنامه‌سازی کاربردی ۱۸ اضافه شده است.
  • ‫nodpi: برای منابع بیت‌مپ استفاده می‌شود که نمی‌خواهید برای مطابقت با تراکم دستگاه مقیاس‌بندی شوند.
  • tvdpi: صفحه‌نمایش‌هایی که بین mdpi و hdpi هستند؛ تقریباً ۲۱۳ dpi. این گروه به‌عنوان گروه تراکم «اصلی» درنظر گرفته نمی‌شود. این گزینه بیشتر برای تلویزیون‌های 720p درنظر گرفته شده است و اکثر برنامه‌ها به آن نیاز ندارند. برای پانل‌های تلویزیون ۱۰۸۰ پیکسل، از xhdpi و برای پانل‌های تلویزیون 4K، از xxxhdpi استفاده کنید. در سطح میانای برنامه‌سازی کاربردی ۱۳ اضافه شده است.
  • ‫anydpi: با همه تراکم‌های صفحه مطابقت دارد و بر سایر توصیف‌کننده‌ها اولویت دارد. این ویژگی برای ترسیمی‌های بُرداری مفید است. در سطح میانای برنامه‌سازی کاربردی ۲۱ اضافه شد.
  • nnndpi: برای نشان دادن تراکم‌های غیراستاندارد استفاده می‌شود، که در آن nnn تراکم صفحه عدد صحیح مثبت است. در اکثر موارد از این گزینه استفاده نمی‌شود. استفاده از دسته‌های تراکم استاندارد، سربار پشتیبانی از تراکم‌های مختلف صفحه‌نمایش دستگاه‌های موجود در بازار را به‌طور قابل‌توجهی کاهش می‌دهد.

نسبت مقیاس‌بندی بین شش چگالی اصلی (با نادیده گرفتن چگالی tvdpi) برابر با ۳:۴:۶:۸:۱۲:۱۶ است. بنابراین، بیت‌مپ ۹×۹ در ldpi برابر با ۱۲×۱۲ در mdpi،‏ ۱۸×۱۸ در hdpi،‏ ۲۴×۲۴ در 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: دستگاه صفحه‌کلید سخت‌افزاری ۱۲ کلیدی دارد، چه برای کاربر قابل‌مشاهده باشد یا نه.

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

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

سطح API پشتیبانی‌شده توسط دستگاه. برای مثال، v1 برای سطح میانای برنامه‌سازی کاربردی ۱ (دستگاه‌های دارای Android نسخه ۱.۰ یا بالاتر) و v4 برای سطح میانای برنامه‌سازی کاربردی ۴ (دستگاه‌های دارای Android نسخه ۱.۶ یا بالاتر). برای کسب اطلاعات بیشتر درباره این مقادیر، به سند سطوح میانای برنامه‌سازی کاربردی Android مراجعه کنید.

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

در برنامه‌های Compose، توصیف‌گرهای پیکربندی مربوط به چیدمان و ابعاد لازم نیستند. اگرچه این موارد هنوز وجود دارند، از جدول ۲ مستثنی شده‌اند. این واجدین شرایط عبارتند از: جهت چیدمان، کوچک‌ترین عرض، عرض دردسترس، ارتفاع دردسترس، اندازه صفحه‌نمایش، نسبت ابعاد صفحه‌نمایش، صفحه‌نمایش گرد، و جهت صفحه‌نمایش. برای مشاهده جدول کامل توصیف‌گرهای پیکربندی به‌ترتیب اولویت، به نمای کلی منابع برنامه (نماها) مراجعه کنید.

قوانین نام واجدشرایط

در اینجا چند قانون درباره استفاده از نام‌های توصیف‌گر پیکربندی آورده شده است:

  • می‌توانید چند توصیف‌گر را برای یک مجموعه منابع مشخص کنید و آن‌ها را با خط تیره از هم جدا کنید. برای مثال، drawable-en-rUS-night برای دستگاه‌های انگلیسی (ایالات متحده) در حالت شب اعمال می‌شود.
  • توصیف‌کننده‌ها باید به ترتیبی که در جدول ۲ فهرست شده است باشند.
    • اشتباه: drawable-hdpi-night/
    • درست: drawable-night-hdpi/
  • فهرست‌های راهنمای منبع جایگزین نمی‌توانند تودرتو باشند. برای مثال، نمی‌توانید res/drawable/drawable-en/ داشته باشید.
  • مقادیر به حروف بزرگ و کوچک حساس نیستند. کامپایلر منبع نام دایرکتوری‌ها را قبل‌از پردازش به حروف کوچک تبدیل می‌کند تا از بروز مشکل در سیستم‌های فایل غیرحساس به حروف بزرگ و کوچک جلوگیری شود. هرگونه حروف بزرگ در نام‌ها فقط برای بهبود خوانایی است.
  • فقط یک مقدار برای هر نوع توصیف‌کننده پشتیبانی می‌شود. برای مثال، اگر می‌خواهید از فایل‌های قابل‌ترسیم یکسانی برای اسپانیا و فرانسه استفاده کنید، نمی‌توانید دایرکتوری‌ای با نام drawable-es-fr/ داشته باشید. به‌جای آن، به دو فهرست راهنمای منبع نیاز دارید، مثل drawable-es/ و drawable-fr/، که حاوی فایل‌های مناسب باشند.

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

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

ساختن منابع دگرنام

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

ترسیم‌شدنی‌ها

برای مثال، فرض کنید نماد برنامه‌ای (icon.png) دارید و به نسخه منحصربه‌فردی از آن برای مناطق زبانی مختلف نیاز دارید. بااین‌حال، دو منطقه زبانی انگلیسی-کانادایی و فرانسوی-کانادایی باید از یک نسخه استفاده کنند. لازم نیست تصویر یکسانی را در فهرست راهنمای منبع برای هر دو زبان انگلیسی-کانادایی و فرانسوی-کانادایی کپی کنید. درعوض، می‌توانید تصویری را که برای هر دو استفاده می‌شود با هر نامی غیراز icon.png، مثلاً icon_ca.png، ذخیره کنید و آن را در دایرکتوری پیش‌فرض res/drawable/ قرار دهید. سپس فایل icon.xml را در res/drawable-en-rCA/ و res/drawable-fr-rCA/ ایجاد کنید که بااستفاده از عنصر <bitmap> به منبع icon_ca.png ارجاع می‌دهد.

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

این کار به شما امکان می‌دهد فقط یک نسخه از فایل PNG و دو فایل XML کوچک را که به آن اشاره می‌کنند ذخیره کنید. سپس می‌توانید از painterResource(R.drawable.icon) استفاده کنید و سیستم پس‌از شناسایی منطقه زبانی، فایل مناسب را انتخاب خواهد کرد.

رشته‌ها و مقادیر ساده دیگر

برای ایجاد نام مستعار برای رشته موجود، از شناسه منبع رشته موردنظر به‌عنوان مقدار رشته جدید استفاده کنید:

<?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.
  • نام منبع که همان نام فایل بدون پسوند است.

دسترسی به منابع در Compose

Jetpack Compose توابع داخلی و آگاه از ترکیب‌پذیری را برای دسترسی ایمن به منابع ارائه می‌دهد.

  • رشته‌ها:
    stringResource(id = R.string.hello)
  • Drawables:
    painterResource(id = R.drawable.my_icon)

دسترسی به منابع در کد غیرمیانای کاربر

اگر لازم است به منابعی خارج از سلسله‌مراتب واسط کاربرتان دسترسی پیدا کنید (مثلاً در ViewModel، Repository، یا Service سیستم)، می‌توانید آن‌ها را بااستفاده از Context حل کنید.

// Retrieve a localized string resource
val greeting = context.getString(R.string.hello_world)

همچنین می‌توانید منابع فردی را بااستفاده از روش‌های موجود در Resources بازیابی کنید، که می‌توانید نمونه‌ای از آن را با getResources دریافت کنید.

نحو

نحو ارجاع به منبع در کد در اینجا آمده است:

[<package_name>.]R.<resource_type>.<resource_name>
  • <package_name> نام بسته‌ای است که منبع در آن قرار دارد (هنگام ارجاع به منابع از بسته خودتان لازم نیست).
  • <resource_type> زیرکلاس R برای نوع منبع است.
  • <resource_name> یا نام فایل منبع بدون پسوند است یا مقدار مشخصه android:name در عنصر XML، برای مقادیر ساده.

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

دسترسی به فایل‌های اصلی

اگرچه این اتفاق رایج نیست، اما ممکن است لازم باشد به فایل‌ها و دایرکتوری‌های اصلی خود دسترسی پیدا کنید. اگر این کار را انجام دهید، ذخیره کردن فایل‌هایتان در res/ برای شما کار نخواهد کرد، زیرا تنها راه خواندن منبع از res/ با شناسه منبع است. درعوض، می‌توانید منابعتان را در دایرکتوری assets/ ذخیره کنید.

به فایل‌های ذخیره‌شده در فهرست راهنمای assets/ شناسه منبع داده نمی‌شود، بنابراین نمی‌توانید ازطریق کلاس R یا از منابع XML به آن‌ها ارجاع دهید. درعوض، می‌توانید فایل‌ها را در فهرست راهنمای assets/ مانند یک سیستم فایل معمولی پُرسمان کنید و داده‌های خام را بااستفاده از AssetManager بخوانید.

بااین‌حال، اگر تنها چیزی که نیاز دارید توانایی خواندن داده‌های خام (مانند فایل ویدیویی یا صوتی) است، فایل را در دایرکتوری res/raw/ ذخیره کنید و بااستفاده از openRawResource، جاری‌سازی بایت‌ها را بخوانید.

دسترسی به منابع پلاتفرم

Android حاوی تعدادی منابع استاندارد است، مانند سبک‌ها و زمینه‌های سیستم. برای دسترسی به این موارد، مرجع منبع خود را با کلاس بسته android واجدشرایط کنید. برای مثال: painterResource(android.R.drawable.ic_menu_info_details).

ارائه بهترین سازگاری دستگاه با منابع

برای اینکه برنامه‌تان از پیکربندی‌های چند دستگاه پشتیبانی کند، بسیار مهم است که همیشه منابع پیش‌فرض را برای هر نوع منبعی که برنامه‌تان استفاده می‌کند ارائه دهید.

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

تا زمانی که منابع پیش‌فرض values/ را ارائه دهید، برنامه‌تان به‌درستی اجرا می‌شود، حتی اگر کاربر زبانی را که برنامه ارائه می‌دهد متوجه نشود. بهتر از خراب شدن است.

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

برای مثال، اگر minSdkVersion شما روی ۴ تنظیم شده باشد و همه منابع ترسیم‌شدنی‌تان را بااستفاده از حالت شب (night یا notnight که در سطح ۸ میانای برنامه‌سازی کاربردی اضافه شده‌اند) واجدشرایط کنید، دستگاهی با سطح ۴ میانای برنامه‌سازی کاربردی نمی‌تواند به منابع ترسیم‌شدنی شما دسترسی پیدا کند و ازکار می‌افتد. در این مورد، احتمالاً می‌خواهید notnight منابع پیش‌فرض شما باشد، بنابراین آن توصیف‌کننده را کنار بگذارید و منابع ترسیم‌شدنی خود را در drawable/ یا drawable-night/ قرار دهید.

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

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

نحوه پیدا کردن بهترین منبع منطبق توسط Android

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

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

و فرض کنید پیکربندی دستگاه به‌صورت زیر است:

منطقه زبانی = en-GB
حالت شب = night
تراکم پیکسل صفحه‌نمایش = hdpi
نوع نمایشگر لمسی = notouch
روش اصلی ورودی نوشتار = 12key

Android با مقایسه پیکربندی دستگاه با منابع جایگزین دردسترس، ترسیم‌شدنی‌ها را از drawable-en-night انتخاب می‌کند.

سیستم با منطق زیر تصمیم می‌گیرد که از کدام منابع استفاده کند:

شکل ۲. روندنمای نحوه پیدا کردن بهترین منبع منطبق توسط Android.

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

    فهرست راهنمای drawable-fr-rCA/ حذف شده است، زیرا با منطقه زبانی en-GB مغایرت دارد.

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

    استثنا: تراکم پیکسلی صفحه‌نمایش تنها واجدشرایطی است که به‌دلیل تناقض حذف نمی‌شود. اگرچه تراکم صفحه دستگاه hdpi است، drawable-night-ldpi/ حذف نمی‌شود زیرا در این مرحله، هر تراکم صفحه‌ای به‌عنوان مطابقت درنظر گرفته می‌شود. برای اطلاعات بیشتر، به نمای کلی سازگاری صفحه‌نمایش مراجعه کنید.

  2. توصیف‌کننده بعدی با بالاترین اولویت را در فهرست پیدا کنید (جدول ۲). (با MCC شروع می‌شود.)
  3. آیا هیچ‌کدام از فهرست‌های راهنمای منبع شامل این شناسه هستند؟
    • اگر نه، به مرحله دو برگردید و به واجدشرایط بعدی نگاه کنید. در این مثال، پاسخ «نه» است تا زمانی که به توصیف‌گر زبان برسیم.
    • اگر بله، به مرحله چهار بروید.
  4. فهرست‌های راهنمای منبعی را که شامل این توصیف‌گر نیستند حذف کنید. در این مثال، سیستم سپس همه دایرکتوری‌هایی را که توصیف‌گر زبان ندارند حذف می‌کند:
    drawable/
    drawable-en/
    drawable-en-night/
    drawable-en-notouch-12key/
    drawable-night-ldpi/
    drawable-night-notouch-12key/
    

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

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

    دایرکتوری باقی‌مانده drawable-en-night است.

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

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

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

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

منابع بیشتر

برای کسب اطلاعات بیشتر درباره منابع برنامه، منابع اضافی زیر را ببینید:

اسناد

محتوا را مشاهده می‌کند