معرفی Resource ها و نحوه دسترسی به آن ها در اندروید

[two_third]

آیتم های بسیاری برای ساخت یک اپلیکیشن خوب اندروید وجود دارند. جدا از کدنویسی برای اپلیکیشن، ما به منابع مختلف دیگری نیاز داریم مانند محتواهای استاتیکی که در کد استفاده می شوند، مثل bitmapها، color، تعریف layout، string، animation و بسیاری دیگر. این منابع همیشه در یک زیر فولدر به صورت جداگانه نگه داری می شوند که فولدر res نام دارد.

here[/two_third] [one_third_last]

Resource

[/one_third_last]

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

ساختار منابع در اندروید استودیو


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

Resource

معرفی فولدرها

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

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

drawable/ – فایل تصویر مانند .png ، .jpg ، .gif یا فایل های XML ای که به bitmaps، state listها، shapes و animation drawable کامپایل می شوند. در فولدر res/drawable ذخیره شده و از طریق کلاس R.drawable قابل دسترسی هستند.

layout/ – فایل XML ای که لایه رابط کاربری (UI) را تعریف می کند. در فولدر res/layout ذخیره شده و از طریق کلاس R.layout قابل دسترسی هستند.

Menu/ – فایل XML ای که منوهای اپلیکیشن را مشخص می کند، مانند منوی گزینه ها، منوی محتوا یا زیر منوها. این منوها در فولدر res/menu ذخیره شده و از طریق کلاس R.menu قابل دسترسی هستند.

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

Values/ – فایل های XML ای که شامل مقادیر ساده ای مانند string ها، integerها و color ها هستند. برای مثال، در اینجا نام های قراردادی وجود دارند که می توان در این دایرکتوری ایجاد کرد.

  • xml – برای منابع آرایه ای و با R.array می توان به آن دسترسی پیدا کرد.
  • xml – برای منابع integer و از طریق کلاس R.integer می توان به آن دسترسی پیدا کرد.
  • xml – برای منابع Boolean و از طریق R.bool قابل دسترسی می باشد.
  • xml – برای مقادیر رنگ و از طریق R.color می توان به آن دسترسی پیدا کرد.
  • xml – برای مقادیر و اندازه ها استفاده می شود و از طریق کلاس R.dimen قابل دسترسی است.
  • xml – برای مقادیر رشته ای و با استفاده از R.string قابل دسترسی است.
  • xml – برای استایل ها و از طریق R.style می توان به آن دسترسی پیدا کرد.

xml/ – فایل های اختیاری XML ای هستند که می توان آن ها را در زمان اجرای برنامه با فراخوانی Resources.getXML() خواند. می توان فایل های تنظیمات بسیاری را اینجا ذخیره کرد که در زمان اجرا استفاده شوند.

Resourceهای جایگزین

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

برای مشخص کردن منابع جایگزین برای مجموعه ای از resource ها به صورت زیر عمل می کنیم:

  • یک دایرکتوری در res/ ایجاد می کنیم و نامی به شکل <resources_name>-<config_qualifier> برای آن انتخاب می کنیم. در اینجا resource_name می تواند هر یک از esource های ذکر شده در بالا باشد، مانند layout، drawable و… qualifier یک تنظیمات خاصی را برای هر یک از این منابع مشخص می کند که به این منظور استفاده شوند. برای مشاهده لیست کامل qualifier های هر یک از انواع منابع می توانید به داکیومنت رسمی اندروید مراجعه نمایید.
  • منابع جایگزین مربوطه را در این دایرکتوری ذخیره می کنیم. همانطور که در مثال زیر نشان داده شده است، این فایل باید دقیقا هم نام resource اصلی باشد، اما این فایل محتوای جایگزین خواهد داشت. برای مثال، درست است که نام تصویر باید یکی باشد اما برای صفحه نمایشی با resolution بالا باید resolution آن بالاتر باشد.

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


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

 

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


MyProject/
src/
main/
java/
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 تولید می شود که شامل ID تمام منابعی است که در دایرکتوری res/ قرار دارند. می توانیم با استفاده از کلاس R و نام زیردایرکتوری و نام resource و یا به طور مستقیم resource ID به resource موردنظر دسترسی پیدا کنیم.

مثال:

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


ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);

در اینجا خط اول کد، با استفاده از R.id.myimageview به imagView که با آی دی myimageview در فایل layout تعریف شده بود، دسترسی پیدا کردیم. خط دوم کد از R.drawable.myimage برای گرفتن تصویری با نام myimage که در drawble زیر دایرکتوری res/ موجود است، استفاده شده است.

مثال:

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


<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello, World!</string>
</resources>

حال می توانیم این متن را بر روی شی ء TextView با آی دی msg ست کنیم.


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

مثال:

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


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />

<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />

</LinearLayout>

کد اپلیکیشن زیر، در متد onCreate() این layout را برای اکتیویتی بارگذاری می کند.


public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}

 

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

XML زیر را در نظر بگیرید، فایل res/values/strings.xml که شامل یک color resource و یک string resource است:


<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="opaque_red">#f00</color>
<string name="hello">Hello!</string>
</resources>

حال می توان از این منابع در layout زیر برای تنظیم متن و رنگ استفاده کرد:


<?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" />

حالا اگر دوباره به قسمت قبلی برگردید، جایی که اولین پروژه را ایجاد کردیم مطمئنا مفاهیمی که در آن توضیح داده شده را بهتر درک خواهید کرد. بنابراین پیشنهاد می کنیم جلسه قبل را دوباره مرور کنید.

 

فاطمه زکایی

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

نوشته‌های مرتبط

دیدگاه‌ها

*
*

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

ما یک پرسشنامه‌ی کوچولو داریم، که قول میدیم وقتتون رو خیلی نمی‌گیره، ولی کلی به ما کمک می‌کنه، چون هم assessment مونه ,و هم شما به ما در این زمینه کمک میکنید.بزن بریم