سازماندهی و دسترسی به ریسورس ها در اندروید
آیتم های زیادی وجود دارد که شما باید برای ایجاد یک اپلیکیشن اندروید خوب از آنها استفاده می کنید. جدا از کد نویسی برای اپلیکیشن، شما باید حساب ریسورس ها یا همان منابع مختلف دیگری مانند محتوای ایستا از قبیل تصاویر، رنگ ها، تعریف لایه ها، رشته های رابط کاربری، دستورالعمل های انیمیشن و … که کدتان از آنها استفاده می کند را بکنید. این ریسورس ها همیشه به صورت جدا در پوشه های مختلف درون پوشه res/ پروژه نگهداری می شوند.
این آموزش به شما توضیح می دهد که چطور ریسورس های اپلیکیشن خود را سازماندهی کنید، چطور ریسورس های جایگزین را مشخص کنید و چطور در اپلیکیشن خود از آنها استفاده کنید.
MyProject/ app/ manifest/ AndroidManifest.xml java/ MyActivity.java res/ drawable/ icon.png layout/ activity_main.xml info.xml values/ strings.xml
شماره | نوع ریسورس ها و پوشه |
---|---|
۱ | anim/
محل ذخیره سازی فایل های xml که ویژگی های انیمیشن ها را مشخص می کند در پوشه res/anim/ ذخیره می شود و از طریق کلاس R.anim به آن دسترسی خواهیم داشت. |
۲ | color/
محل ذخیره سازی فایل های xml که state لیست رنگ ها را مشخص می کند. آنها در پوشه res/color/ ذخیره می شوند و با استفاده از کلاس R.color به آنها دسترسی خواهیم داشت. |
۳ | drawable/
محل ذخیره سازی فایل های تصویر مثل png ،jpg ،gif یا فایل های xml کامپایل شده در بیت مپ ها، state لیست ها، shape ها ، انیمیشن دراوابل. آن ها در پوشه res/drawable/ ذخیره می شوند و با استفاده از کلاس R.drawable به آنها دسترسی خواهیم داشت. |
۴ | layout/
محل ذخیره سازی فایل های xml که مشخص کننده لی اوت رابط کاربری است. آن ها در پوشه res/layout/ ذخیره می شوند و از طریق کلاس R.layout به آنها دسترسی خواهیم داشت. |
۵ | menu/
محل ذخیره سازی فایل های xml که منو های اپلیکیشن را مشخص می کنند، از قبلل یک Options Menu، Context Menu یا Sub Menu. آنها در پوشه res/menu/ ذخیره می شوند و از طریق کلاس R.menu قابل دسترس هستند. |
۶ | raw/
محل ذخیره سازی فایل های دلخواه ی که در شکل خام یا raw هستند. برای باز کردن فایل raw مورد نظر، شما باید متد Resources.openRawResource() را صدا بزنید و آی دی منبع یا همان ریسورس را که به شکل R.raw.filename می باشد به آن بدهید. |
۷ | values/
محل ذخیره سازی فایل های xml ی که حاوی مقادیر ساده از قبیل رشته ها، اعداد و رنگ ها می باشد. برای مثال در زیر فایل هایی که شما می توانید در این پوشه ایجاد کنید را آورده ام.
|
۸ | xml/
محل ذخیره سازی فایل های xml دلخواه که که میتوان در ران تایم (هنگام اجرای اپلیکیشن) با فراخوانی Resources.getXML() محتوای آنها را خواند. شما می توانید پیکربندی مختلفی را که در ران تایم به آن نیاز دارید، در این پوشه ذخیره کنید. |
ریسورس های جایگرین
اپلیکیشن شما برای پیکربندی دستگاه های خاص باید ریسورس های جایگزینی را ارائه دهد. برای مثال شما باید برای صفحه نمایش های با رزولوشن مختلف، drawable های جایگزین (مثلا تصاویر) و برای زبان ها مختلف ریسورس های رشته ای جایگزینی را در اپلیکیشن قرار دهید. اندروید در ران تایم پیکر بندی دستگاه فعلی را تشخیص داده و ریسورس های مناسب را برای اپلیکیشن شما بارگذاری می کند.
برای مشخص کردن پیکربندی های خاص جایگزین برای مجموعه ای از ریسورس ها، قدم های زیر را دنبال کنید.
- ایجاد پوشه جدید در res/ و نام گذاری آن به شکل <نام_ریسورس>-<مشخص_کننده_پیکربندی>. نام_ریسورس می تواند نام هر کدام از ریسورس هایی که در جدول بالا معرفی شد مثل layout، drawable و … باشد. مشخص_کننده_پیکربندی هم مشخص کننده پیکربندی خاصی است برای اینکه کدام یک از ریسورس ها باید استفاده شوند. شما می توانید داکیومنت های رسمی گوگل را برای مشاهده لیست کامل مشخص کننده ها بررسی کنید.
- ریسورس های جایگزین مربوطه را در این پوشه ذخیره کنید. فایل های ریسورس باید دقیقا مانند فایل های ریسورس های پیش فرض نام گذاری شده باشند، همانگونه که در مثال زیر نشان داده شده است، اما این فایل ها محتوای مشخص برای جایگزینی را خواند داشت. اگر چه نام فایل ها یکی هستند اما برای استفاده در صفحه نمایش های با رزولوشن بالا، رزولوشن این فایل ها بالا خواهد بود.
در زیر مثالی از ساختار یک اپلیکیشن است که تصاویری را برای صفحه نمایش پیش فرض و تصاویر جایگزین برای صفحه نمایش های با رزولوشن بالا را مشخص می کند.
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
در زیر مثال دیگری که layoutی را برای زبان پیش فرض و layout جایگزینی را برای زبان عربی مشخص می کند.
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 به ریسورس های تعریف شده دسترسی داشته باشید. بخش زیر توضیح می دهد که چگونه در کدها و layout ها، به ریسورس ها دسترسی داشته باشید.
دسترسی به ریسورس ها در کد
وقتی اپلیکیشن اندرویدتان کامپایل شد، یک کلاس به نام R ایجاد می شود که حاوی ID های ریسورس های موجود در پوشه res/ می باشد. شما می توانید از کلاس R و زیر پوشه و نام ریسورس ، یا مستقیما با استفاده از ID ریسورس، به ریسورس مورد نظر دسترسی پیدا کنید.
مثال
برای دسترسی به res/drawable/myimage.png و قرار دادن آن در یک ImageView، باید از کد زیر استفاده کنید.
ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage);
در خط اول کد از R.id.myimageview برای گرفتن ImageView که با آی دی 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>
حالا می توانید با استفاده از آی دی msg ، آبجکت TextView را به دست بیاورید و متن ریسور را در آن قرار دهید. حالا می توانید با استفاده از آی دی msg ، آبجکت TextView را به دست بیاورید و متن ریسور را در آن قرار دهید.
TextView msgTextView = (TextView) findViewById(R.id.msg); msgTextView.setText(R.string.hello);
مثال
لی اوت 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 بالا را در متد onCreate() برای یک اکتیویتی لود می کند.
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); }
دسترسی یه ریسورس ها در 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" />
حالا اگر شما یک بار دیگر آموزش قبلی سایت که در آن مثال Hello World را توضیح داده ایم را مطالعه کنید مطمئنم که درک بهتری از همه مفاهیمی که در این آموزش داده شد پیدا خواهید کرد. پس من شدیدا بررسی آموزش قبلی سایت را به شما توصیه می کنم تا هم یک مثال انجام دهید و بررسی کنید که چطور از ریسورس های مختلف در ابتدایی ترین سطح استفاده کنید.