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

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

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

سازماندهی منابع

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

MyProject/‎
‎ ‎ src/ ‎
‎ ‎ MyActivity.java ‎
‎ ‎ res/‎
‎ ‎ drawable/ ‎
‎ ‎ icon.png ‎
‎ ‎ layout/ ‎
‎ ‎ activity_main.xml
‎ info.xml
‎ values/ ‎
‎ ‎ strings.xml

دایرکتوری res/ شامل همه­ی منابع موجود در دایرکتوری های فرعی مختلف است. در اینجا ما یک فایل منبع تصویر، دو فایل منبع صفحه بندی، و یک فایل منبع رشته داریم. جدول زیر جزئیاتی را در مورد دایرکتوری های منابع پشتیبانی شده در دایرکتوری res/ پروژه ارائه می دهد.

دایرکتوری

نوع منبع

anim/

فایل های XML ای که ویژگی های انیمیشن ها را تعریف می کنند. آنها در پوشه­ ی res/anim/ ذخیره می شوند و به وسیله­ ی کلاس R.anim مورد دسترسی قرار می گیرند.

color/

فایل های XML ای که لیست وضعیت رنگ ها را تعریف می کند. آنها در پوشه res/color/ ذخیره می شوند و از طریق کلاس R.color مورد دسترسی قرار می گیرند.

drawable/

فایل های تصویری مانند .png،.gif،.jpg یا فایل های XML ای هستند که به بیت مپ ها، لیست های وضعیت (state list)، شکل ها(shapes) و موارد کشیدنی انیمیشن ها (animation drawables) کامپایل می شوند. آنها در پوشه res/drawable/ ذخیره می شوند و از کلاس R.drawable مورد دسترسی قرار می گیرند.

layout/

فایل های XML ای که یک طرح واسط کاربری را تعریف می کنند. آنها در پوشه res/layout/ ذخیره می شوند و از طریق کلاس R.layout مورد دسترسی قرار می گیرند.

menu/

فایل های XML ای که منوهای اپلیکیشن ها را تعریف می کنند. مانند منوی گزینه ها (Options Menu)، Context Menu یا Sub Menu (منوی فرعی). آنها در پوشه res/menu/ ذخیره می شوند و از طریق کلاس R.menu مورد دسترسی قرار می گیرند.

raw/

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

values/

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

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

arrays.xml مربوط به منابع آرایه ای(resource arrays) است و دسترسی به آنها از طریق کلاس R.array انجام می شود.

integers.xml مربوط به منابع اعداد صحیح (resource integers) است و دسترسی به آنها از طریق کلاس R.integer انجام می شود.

bools.xml مربوط به منابع بولی است و دسترسی به آنها از طریق کلاس R.bool انجام می شود.

colors.xml مربوط به مقادیر رنگ است و دسترسی به آن از طریق کلاس R. color انجام می شود.

dimens.xml مربوط به ابعاد است و دسترسی به آن از طریق کلاس R. dimen انجام می شود.

strings.xml مربوط به مقادیر رشته است و دسترسی به آن از طریق کلاس R. string انجام می شود.

styles.xml مربوط به سبک ها (Style) است و دسترسی به آن از طریق کلاس R. style انجام می شود.

xml/

فایل های XML اختیاری ای که می توانند در زمان اجرا با فراخوانی Resources.getXML() خوانده شوند. شما می توانید فایل های پیکره بندی مختلف را برای استفاده در زمان اجرا، در اینجا ذخیره کنید.

منابع جایگزین

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

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

یک دایرکتوری جدید در res/ named به صورت resources_name>> ایجاد کنید. در اینجا resources_name می تواند هر کدام از منابع مطرح شده در جدول بالا مانند layout، drawable و غیره باشد. qualifier (توصیف کننده) یک پیکر بندی منحصر به فرد را مشخص می کند که این منابع در آن استفاده می شوند. شما می توانید اسناد رسمی را برای لیست کاملی از توصیف گرهای مربوط به انواع مختلف منابع، بررسی کنید.

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

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

MyProject/‎
‎ src/ ‎
‎ MyActivity.java ‎
‎ res/‎
‎ drawable/ ‎
‎ icon.png
‎ background.png
‎ drawable-hdpi/ ‎
‎ icon.png
‎ background.png ‎
‎ layout/ ‎
‎ activity_main.xml
‎ info.xml
‎ values/ ‎
‎ strings.xml

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

MyProject/‎
‎ src/ ‎
‎ MyActivity.java ‎
‎ res/‎
‎ drawable/ ‎
‎ icon.png
‎ background.png
‎ drawable-hdpi/ ‎
‎ icon.png
‎ background.png ‎
‎ layout/ ‎
‎ activity_main.xml
‎ info.xml
‎ layout-ar/‎
‎ main.xml
‎ values/ ‎
‎ strings.xml

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

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

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

زمانیکه اپلیکیشن اندروید شما، کامپایل میشود، یک کلاس R تولید میشود که شامل شناسه های منابع برای تمام منابع موجود در دایرکتوری res/ شماست. شما می توانید با استفاده از نام دایرکتوری فرعی و منبع و یا شناسه منبع مستقیم، از کلاس R، برای دسترسی به این منابع استفاده کنید.

مثال

برای دسترسی به res/drawable/myimage.png و تنظیم یک ImageView شما از کد زیر استفاده می کنید.

TextView msgTextView = (TextView) findViewById(R.id.msg); ‎
msgTextView.setText(R.string.hello);‎

در اینجا اولین خط کد، از R.id.myimageview برای گرفتن ImageView تعریف شده با شناسه­ ی myimageview در یک فایل صفحه بندی استفاده می کند. دومین خط کد از R.drawable.myimage برای گرفتن یک تصویر با نام myimage که در دایرکتوری فرعی drawable، تحت دایرکتوری /res قرار دارد، به کار می رود.

مثال

مثال بعدی را در نظر بگیرید که در آن res/values/strings.xml دارای تعریف زیر است.

‎ ‎

‎Hello, World! ‎

اکنون شما می توانید، متن را بر روی یک شی TextView با شناسه­ ی msg، با استفاده از یک شناسه منبع به صورت زیر تنظیم کنید.

TextView msgTextView = (TextView) findViewById(R.id.msg); ‎
msgTextView.setText(R.string.hello);‎

مثال

یک صفحه بندی res/layout/activity_main.xml را با تعریف زیر در نظر بگیرید.

‎ ‎

‎ ‎ ‎

‎ ‎