هر نرم افزاری یکسری منابع کدی و یکسری منابع غیر کدی مانند تصاویر و غیره دارد در این مقاله میخواهیم در باره نحوه تعریف و دسترسی به منابع غیر کدی را توضیح دهیم .
سازماندهی منابع و دسترسی به آنها در اندروید
در برنامه نویسی اندروید آیتم های زیادی برای ایجاد یک اپلیکیشن خوب اندرویدی مورد نیاز است . جدا از کدنویسی اپلیکیشن ، شما باید از منابع ثابت خود نیز بدرستی مراقبت کنید تا هنگام فراخوانی توسط کد ها درست کار کنند. این منابع ثابت مانند تصاویر، رنگ ها، تعاریف طرح ، رشته های تعریف کننده ی رابط کاربری، ساختار های متحرک سازی و بسیاری موارد دیگر میباشند. این منابع در جای مشخصی که معمولا زیر پوشه ای در پوشه res/ است قرار دارند.
این آموزش توضیح خواهد داد که شما چگونه باید منابع نرم افزار خود را چیدمان کنید . نحوه چیدمان منابع جایگزین و نحوه دسترسی به آنها را نیز در این آموزش فرا میگیرید.
سازماندهی منابع در اندروید استودیو
MyProject/
app/
manifest/
AndroidManifest.xml
java/
MyActivity.java
res/
drawable/
icon.png
layout/
activity_main.xml
info.xml
values/
strings.xml
1
anim/:
فایل های XML که انیمیشن و متحرک سازی ها را تعریف خواهند کرد این فایل ها در پوشه res/anim/ ذخیره شده و دسترسی به آنها با کلاس R.anim ممکن است .
2
color/
فایل های XML که لیست ثابت رنگ ها را در خود نگه میدارند و در پوشه res/color/ ذخیره شده اند و با کلاس R.color فرا خوانی میشوند.
3
drawable/:
منابعی مانند فایل های تصویری مانند .png, .jpg, .gif و یا فایل های XML که در فایل های بیت مپ کامپایل می شوند. لیست های ثابت ، شکل ها ، متحرک های قابل رسم ، میباشد که در پوشه res/drawable/ ذخیره شده و توسط کلاس R.drawable قابل دسترس می باشند.
4
layout/:
فایل های XML که ظاهر رابط کاربری را تعریف می کنند. و در پوشه res/layout/ ذخیره شده اند و دسترسی به آنها از طریق کلاس R.layout امکان پذیر است.
5
menu/
فایلهای XML که منو های نرم افزار را تعریف می کنند ، مانند یک منوی آپشن ها ، منوی محتوا یا زیر منو ها . این فایل ها در پوشه res/menu/ ذخیره شده و دسترسی به آنها از طریق R.menu امکان پذیر است.
6
raw/:
فایل های Arbitrary (فایل های که اجازه تغییر در همه نوع فایلی را ممکن می کنند) که در فرمت raw ذخیره گردیده و شما باید متد Resources.openRawResource() را با شناسه منبع فراخوانی کنید . کاری که به R.raw.filename امکان باز کردن فایل های raw را میدهد.
7
values/:
منابعی از فایل های XML که دارای مقادیر ساده ای مانند رشته ها، عداد صحیح ، و رنگها میباشد . برای مثال در اینجا چند filename که میتوان برای منابع موجود در این پوشه انتخاب کرد.
arrays.xml: این فایل ها برای آرایه ها بکار میروند و با کلاس R.array فرا خوانی خواهند شد.
integers.xml : برای اعداد صحیح و دسترسی به آنها با کلاس R.integer ممکن خواهد بود.
bools.xml : برای مقادیر و منابع Boolean یا همان صحیح و غلط بکار میرود و باکلاس R.bool فراخوانی میشوند.
colors.xml : برای مقادیر رنگها و دسترسی به آنها از طریق کلاس R.color ممکن است .
dimens.xml : برای مقادیر ابعاد (طول ، عرض و ارتفاع) و دسترسی به آنها از طریق R.dimen ممکن است .
strings.xml : برای مقادیر رشته ای که دسترسی به آنها با کلاس R.string انجام میشود.
styles.xml : برای استایل ها استفاده میشود و با کلاس R.style فراخوانی میشوند.
8
xml/:
فایل های Arbitrary XML که میتوانند در زمان اجرا با فراخوانی Resources.getXML() خوانده شوند . شما میتوانید از این فایل ها برای ذخیره پیکربندی فایل ها استفاده کنید، تا بتوانید در زمان اجرا از آنها استفاده نمایید.
منابع جایگزین
نرم افزار شما باید منابع جایگزین برای پشتیبانی از پیکربندی دستگاه های خاص را داشته باشد. برای مثال شما باید منابع جایگزین برای فایل های کشیدنی i.e.images باشید تا بتوانید با اندازهای مختلف صفحه نمایش کار کنید. و یا باید منابع جایگزین رشته ای را برای زبان های مختلف داشته باشید . در هنگام اجرای نرم افزار اندروید، ویژگی های دستگاه را خوانده و نرم افزار شما را بر اساس آن اجرا می کند.
برای تنظیمات منابع خود برای پیکربندی های خاص گام های زیر را انجام دهید:
- یک پوشه جدید در پوشه res/ ایجاد کنید، نام آن را از <resources_name>-<config_qualifier> انتخاب کنید. در اینجا resources_name میتواند هر کدام از منابع بالا مانند layout, drawable و غیره باشد، تگ qualifier برای هرکدام از این منابع که در بالا ذکر شد در صورتی که آماده بکارگیری باشد، پیکربندی خاصی را تعریف خواهد کرد. در آینده مقاله ای را در باره لیست کامل qualifiers برای انواع منابع ارائه خواهیم داد.
- منابع جایگزین مرتبط را در این پوشه جدید ذخیره کنید. نام فایل منابع جایگزین و منابع اصلی باید دقیقا مانند هم باشد. به مثال زیر نگاه کنید این هم نامی را میتوانید مشاهده کنید.محتوای این فایل های جایگزین با محتوای فایل های اصلی متفاوت بوده و محتوای خاص خود را دارا میباشند. برای مثال در فایل عکس نام عکس باید دقیقا یکسان باشد ولی اندازه و رزولوشن آن در دستگاه های با کیفیت بالاتر صفحه بیشتر از دستگاه های دیگر خواهد بود.
در مثال زیر عکس های پیشفرض برای دستگاه های معمولی و عکس های با رزولوشن بالا برای دستگاه هایی که کیفیت بالاتری دارند استفاده میشوند.
MyProject/
app/
manifest/
AndroidManifest.xml
java/
MyActivity.java
res/
drawable/
icon.png
background.png
drawable-hdpi/
icon.png
background.png
layout/
activity_main.xml
info.xml
values/
strings.xml
در زیر یک مثال دیگر هست که یک صفحه را برای زبان پیشفرض تعریف می کند و بعد صفحه جایگزین را برای زبان عربی ایجاد می کند.
MyProject/
app/
manifest/
AndroidManifest.xml
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
دسترسی به منابع
در طول توسعه نرم افزار شما به تعریف منابع خود در کدها نیاز پیدا می کنید. و یا در فایل های layout XML به منابع خود نیاز خواهید داشت. قسمت بعدی به شما توضیح میدهد که چگونه میتوانید از هر دو مسیر به منابع خود دسترسی داشته باشید.
دسترسی به منابع در کد
وقتیکه نرم افزار اندرویدی شما کامپایل میشود یک کلاس R تولید میشود که تمام Ids های منابع موجود در پوشه res/ را در اختیار دارد. شما میتوانید از کلاس R برای دسترسی به منابع با استفاده از sub-directory و نام منبع و یا ID مستقیم منابع استفاده کنید.
مثال
برای دسترسی به res/drawable/myimage.png و ایجاد یک نمایش عکس از کد زیر استفاده می کنیم.
ImageView imageView = (ImageView) findViewById(R.id.myimageview);
imageView.setImageResource(R.drawable.myimage);
در خط اول کد R.id.myimageview برای دریافت ImageView و تعریف با id مربوط به myimageview در یک فایل Layout است . در خط دوم کد از R.drawable.myimage برای دریافت یک عکس با نام myimage که در زیر پوشه drawable قرار دارد این پوشه خود در پوشه /res است.
مثال :
مثال زیر را در نظر بگیرید و مکان تعریف res/values/strings.xml را مشخص کنید:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello, World!</string>
</resources>
شما میتوانید یک متن را با کمک resource ID روی یک شئی TextView با یک ID 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>
در نرم افزار زیر ما ساختار layout را برای یک Activity در متد onCreate() بصورت مثال زیر فراخوانی می کنیم:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
دسترسی به منابع در XML :
در مقاله های قبلی آموزش اندروید مختصری در باره فایل های XML صحبت کرده بودیم. با توجه به منابع XML زیر فایل res/values/strings.xml دارای منابع کد رنگ و رشته ها میباشد:
<?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" />
حالا به مثال سلام دنیا بازگردید و آن را یکبار دیگر توضیح دهید مطمئن هستیم که درک بهتری از آن خواهید داشت. قبل از اینکه از این آموزش رد شوید مطمئن شوید تمام مطالبی که تا اینجا توضیح داده ایم بخوبی درک کرده اید.
تهیه شده در شرکت برنامه نویسی سارگون با ما در تماس باشید.