کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

آموزش Xamarin-منابع جایگزین(Alternate Resources)- قسمت 3

آموزش Xamarin-منابع جایگزین(Alternate Resources)- قسمت 3

"Alternate resources" منابعی هستند که برای یک دستگاه خاص یا پیکربندی run-time مانند زبان فعلی، اندازه صفحه نمایش خاص یا تراکم پیکسل هدف قرار می گیرند. اگر آندروید می تواند از یک "منبع" که برای یک دستگاه خاص یا پیکربندی ، از "منبع پیش فرض دقیق تر باشد و مطابقت کند سپس آن منبع به جای منبع پیش فرض استفاده می شود. اگر یک منبع جایگزین را پیدا نکند که مطابق با پیکربندی فعلی باشد، منابع پیش فرض بارگیری خواهد شد. چگونه آندروید تصمیم می گیرد که چه منابعی توسط یک برنامه مورد استفاده قرار گیرد، جزئیات بیشتری در بخش "Resource Location" داده خواهد شد.
منابع جایگزین به عنوان یک زیر شاخه در داخل پوشه منابع با توجه به نوع منبع، درست مانند منابع پیش فرض، سازماندهی می شوند. نام زیرشاخه منبع جایگزین در فرم است:

< ResourceType >-< Qualifier >

Qualifier یک نام است که یک پیکربندی خاص دستگاه را شناسایی می کند. ممکن است بیش از یک «qualifier» با یک نام وجود داشته باشد، هر کدام از آنها با یک خط تیره جدا می شوند. به عنوان مثال، تصویر زیر یک پروژه ساده را نشان می دهد که دارای منابع متناوب برای پیکربندی های مختلف است
مانند locale، تراکم صفحه نمایش(screen density)، اندازه صفحه نمایش(screen size) و جهت گیری(orientation):


دوره آموزش Xamarin

قوانین زیر در هنگام اضافه کردن "Qualifiers" به نوع منبع اعمال می شوند:

  1. ممکن است بیش از یک "qualifier" وجود داشته باشد، هر "qualifier" با یک خط تیره جدا می شود.
  2. " qualifier" ممکن است فقط یک بار مشخص شود.
  3. "Qualifiers" باید به ترتیب آنها در جدول زیر نشان داده شود.

Qualifiers هایی که ممکن است برای منبع ذکر شوند:

  • MCC و MNC : mobile country code (MCC) و به صورت اختیاری mobile network code (MNC). سیم کارت MCC را فراهم می کند، در حالی که دستگاه متصل به شبکه MNC را فراهم می کند. اگرچه می توان با استفاده از کد کشور تلفن همراه محلی را هدف قرار داد، روش توصیه شده این است که از تعریف زبان مشخص شده در زیر استفاده کنید. برای مثال، برای تخصیص منابع به آلمان، " qualifier" می تواند mcc262 باشد. برای اختصاص منابع برای T-Mobile در ایالات متحده، " qualifier" mcc310-mnc026 است. برای لیست کامل کد های کشور تلفن همراه و کدهای شبکه تلفن همراه به http://mcclist.com/ مراجعه کنید.
  • Language : کد زبان two-letter ISO 639-1 و به صورت اختیاری به دنبال کد منطقه ای two-letter ISO-3166-alpha-2 می آید. اگر هر دو "Qualifiers" ارائه شده باشند، سپس آنها را با (r-) جدا می کنند. به عنوان مثال، برای هدف قرار دادن زبان های فرانسوی qualifier از fr استفاده می شود. برای هدف قرار دادن مناطق فرانسه و کانادا، fr-rCA مورد استفاده قرار خواهد گرفت. برای لیست کامل کدهای زبان از لینک(http://www.loc.gov/standards/iso639-2/php/English_list.php) و کدهای منطقه از لینک(https://www.iso.org/iso-3166-country-codes.html) می توانید استفاده کنید.
  • کوچکترین عرض(Smallest Width) : کوچکترین عرض صفحه را که برای اجرای برنامه کاربردی در نظر گرفته شده است را تعیین می کند. جزئیات بیشتر را می توانید در مقاله "ایجاد منابع برای صفحه نمایش های متفاوت" ببینید. در API level 13 (Android 3.2) و بالاتر از موجود است. برای مثال، "qualifier sw320dp" برای هدف قرار دادن دستگاههایی که ارتفاع و عرض آن حداقل 320dp است استفاده می شود.
  • عرض موجود(Available Width) - حداقل عرض صفحه در قالب wNdp،جایی که N عرض تراکم پیکسل مستقل است. این مقدار ممکن است به این دلیل که کاربر دستگاه را بچرخاند تغییر کند . جزئیات بیشتر را می توانید در مقاله "ایجاد منابع برای صفحه نمایش های متفاوت" ببینید. در API level 13 (Android 3.2) و بالاتر از موجود است. به عنوان مثال: qualifier w720dp برای هدف قرار دادن دستگاه هایی با عرض حداقل 720dp استفاده می شود.
  • ارتفاع موجود(Available Height) - حداقل ارتفاع صفحه در قالب hNdp، جایی که N ارتفاع در dp است. این مقدار ممکن است به این دلیل که کاربر دستگاه را بچرخاند تغییر کند . جزئیات بیشتر را می توانید در مقاله "ایجاد منابع برای صفحه نمایش های متفاوت" ببینید. در API level 13 (Android 3.2) و بالاتر از موجود است. به عنوان مثال، سازنده h720dp برای استفاده از دستگاههایی که دارای ارتفاع حداقل 720dp هستند، استفاده می شود.
  • Screen Size : این " qualifie" یک تعمیم اندازه صفحه است که برای منابع می باشد. جزئیات بیشتر را می توانید در مقاله "ایجاد منابع برای صفحه نمایش های متفاوت" ببینید.مقادیر ممکن از قبیل(small, normal, large, و xlarge) هستند و در سطح API level 9 (Android 2.3/Android 2.3.1/Android 2.3.2) اضافه شده است.
  • ابعاد صفحه(Screen Aspect) - این براساس نسبت ابعاداست ،و نه جهت گیری (orientation)روی صفحه. یک صفحه نمایش طولانی تر است. در API level 4 (Android 1.6) اضافه شده است. مقادیر ممکن notlong و long هستند.
  • جهت گیری صفحه(Screen Orientation) : screen orientation یا افقی(landscape) یا عمودی(Portrait) است. این می تواند در طول زمان یک برنامه تغییر کند.مقادیر ممکن " port" و " land" هستند.
  • Dock Mode : برای دستگاه در یک dock ماشین یا dock میز. در API level 8 (Android 2.2.x) اضافه شده. مقادیر ممکن car و desk هستند.
  • حالت شب(Night Mode) : این که آیا برنامه در حال اجرا در شب و یا در روز است. این ممکن است در طول زمان یک برنامه تغییر کند و به معنای آن است که به توسعه دهندگان فرصتی برای استفاده از نسخه های تیره تر یک رابط در شب می دهد. در API level 8 (Android 2.2.x) اضافه شده. مقادیر ممکن night و notnight است.
  • تراکم پیکسل صفحه (Screen Pixel Density (dpi)) : تعداد پیکسل ها در یک منطقه مشخص روی صفحه نمایش فیزیکی. به طور معمول به صورت نقطه در اینچ (dpi) بیان می شود.مقادیر احتمالی عبارتند از:
    • ldpi - صفحه نمایش با تراکم کم.
    • mdpi - صفحه نمایش با تراکم متوسط
    • hdpi - صفحه نمایش با تراکم بالا
    • xhdpi - صفحه نمایش با تراکم خیلی بالا
    • nodpi - منابعی که مقیاس پذیر نیستند
    • tvdpi - در API سطح 13 (آندروید 3.2) برای صفحات بین mdpi و hdpi معرفی شده است.
  • نوع صفحه لمسی(Touchscreen Type) : نوع صفحه نمایش لمسی دستگاه را مشخص می کند. مقادیر ممکن است "notouch (بدون صفحه لمسی)"، "قلم- stylus (صفحه نمایش لمسی مقاومت پذیر برای قلم)" و "انگشت- finger (صفحه نمایش لمسی)".
  • صفحه کلید موجود(Keyboard Availability) - تعیین نوع صفحه کلید موجود است. این ممکن است در طول زمان یک برنامه تغییر کند - مثلا زمانی که یک کاربر یک صفحه کلید سخت افزاری را باز کند. مقادیر احتمالی عبارتند از:
    • keysexposed - دستگاه دارای یک صفحه کلید در دسترس است. اگر صفحه کلید نرم افزاری وجود نداشته باشد، سپس این فقط زمانی استفاده می شود که صفحه کلید سخت افزاری باز شود.
    • keyshidden – در این دستگاه یک صفحه کلید سخت افزاری وجود دارد اما پنهان است و هیچ صفحه کلید نرم افزاری فعال نیست.
    • keyssoft - دستگاه دارای صفحه کلید نرم افزاری است.
  • روش ورودی اصلی(Primary Text Input Method) : مشخص کردن چه نوع کلید های سخت افزاری برای ورودی استفاده می شود. مقادیر احتمالی عبارتند از:
    • nokeys - کلید های سخت افزاری برای ورودی وجود ندارد.
    • qwerty - یک صفحه کلید qwerty موجود است
    • 12key - یک صفحه کلید سخت افزاری با 12 کلید وجود دارد
  • دسترسی به کلید ناوبری(Navigation Key Availability) - برای زمانی که 5 جهت یا d-pad (directional-pad) ناوبری در دسترس است. این ممکن است در طول زمان یک برنامه تغییر کند. مقادیر احتمالی عبارتند از:
    • nav exposed - کلید های ناوبری برای کاربر در دسترس هستند.
    • Navhidden - کلیدهای ناوبری در دسترس نیستند.
  • روش اصلی غیر لمسی ناوبری(Primary Non-Touch Navigation Method) :نوع ناوبری موجود در دستگاه موجود است. مقادیر احتمالی عبارتند از:
    • nonav - تنها امکانات ناوبری در دسترس صفحه نمایش لمسی است.
    • (direction-pad) -یک d-pad (directional-pad) برای ناوبری در دسترس است.
    • trackball - دستگاه دارای trackball برای ناوبری است.
    • wheel- سناریوی غیر معمول که در آن یک یا چند چرخ جهت وجود دارد.
  • نسخه سیستم عامل {سطح API}( Platform Version (API level)) - سطح API پشتیبانی شده توسط دستگاه در قالب vN، که در آن N سطح API است که هدف قرار می گیرد. به عنوان مثال، v11 یک دستگاه API level 11 (Android 3.0) را هدف قرار می دهد.

چگونه آندروید تعیین می کند از چه منابعی استفاده شود

بسیار احتمالش ممکن است که یک برنامه آندرویید داری منابع بسیاری باشد. مهم این است که بدانید در هنگام اجرا بر روی یک دستگاه چگونه آندروید منابع را برای یک برنامه انتخاب می کند.
آندروید توسط تکرار بر روی تست های زیر از قوانین منابع پایه (resources base) را تعیین می کند:

  • از بین بردن qualifiers متناقض(Eliminate contradictory qualifiers) : به عنوان مثال، اگر جهت گیری دستگاه portrait باشد، تمام دایرکتوری منابع landscape رد خواهد شد.
  • "Qualifiers" نادیده گرفته شده پشتیبانی نمی شود(Ignore "qualifiers" not supported) : همه Qualifier ها برای تمام سطوح API در دسترس نیستند. اگر یک " resource directory" حاوی " qualifier" است که توسط دستگاه پشتیبانی نمی شود، سپس " resource directory" نادیده گرفته خواهد شد.
  • شناسایی بالاترین اولویت " qualifier" (Identify the next highest priority "qualifier"): با مراجعه به جدول فوق، " qualifier" بالاترین اولویت بعدی (از بالا به پایین) را انتخاب می کند.
  • هر resource directories را برای " qualifier " نگهدارید(Keep any resource directories for "qualifier") : اگر هر " resource directories" وجود دارد که مطابق با " qualifier"است در جدول بالا " qualifier" که بالاترین اولویت بعدی (از بالا به پایین) را دارد انتخاب کنید.

این قوانین همچنین در نمودار جریان زیر نشان داده شده است:


دوره آموزش Xamarin

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

rawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

و اکنون برنامه بر روی یک دستگاه با تنظیمات زیر اجرا می شود:

  • Locale : en-GB
  • Orientation : port
  • Screen density : hdpi
  • Touchscreen type : notouch
  • Primary input method : 12key

برای شروع، منابع فرانسوی از بین می روند زیرا آنها با زبان en-GB درگیری دارند و ما را ترک می کنند:

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

بعد، اولین " qualifier" از جدول " qualifier " در بالا انتخاب می شود: MCC و MNC. هیچ دایرکتوری منابع(resource directories) وجود ندارد که حاوی این تعریف باشد، بنابراین کد MCC / MNC نادیده گرفته می شود.
"Qualifier" بعدی که انتخاب می شود زبان(Language) است . منابعی موجود هستند که با کد زبان مطابقت دارند. تمام دایرکتوریهای منبع که با کد زبان en برابر نیستند رد می شوند، بنابراین در حال حاضر لیستی از منابع به صورت زیر هستند:

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

"Qualifier" بعدی برای جهت گیری صفحه نمایش است، بنابراین تمام "دایرکتوری های منبع" که با جهت گیری صفحه نمایش مطابقت ندارند حذف می شوند:

drawable-en-port
drawable-en-port-ldpi

"Qualifier" بعدی برای تراکم پیکسل صفحه نمایش است ، ldpi ، که منجر به حذف یک فهرست منابع دیگر می شود:

drawable-en-port-ldpi

در نتیجه این فرآیند، Android از منابع drawable resources در دایرکتوری منبع drawable-en-port-ldpi برای دستگاه استفاده خواهد کرد.

توجه:

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

1397/04/16 2273 903
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...