دسترسی و ساماندهی منابع اندروید
آیتمهای خیلی زیادی وجود دارند که شما برای ساختن یک اپلیکیشن خوب برای اندروید از آنها استفاده میکنید. شما به غیر از برنامهنویسی برای ساخت اپلیکیشن، منابع مختلف دیگر مانند محتوای استاتیک (ثابت) از قبیل بیتمپها، رنگها، تعاریف لایوت، سری ابزار تعاملی کنترل صفحه برای کاربر، آموزشهای انیمیشن و خیلی از این قبیل که کدهای شما استفاده میکنند، در نظر میگیرید.
این منابع همیشه به صورت مجزا در زیرشاخههای گوناگونی تحت عنوان شاخه res/ پروژه محفوظ هستند.
این آموزش به شما توضیح خواهد داد که چگونه شما میتوانید منابع نرمافزار خود را ساماندهی کنید، منابع دیگر برای آن تعیین نمایید و به این منابع در نرمافزارهای خود دسترسی داشته باشید.
ساماندهی منابع
شما باید هر نوع از منبع را در یک زیرشاخه خاص از شاخهres/ در پروژه خود قرار دهید. برای مثال، اینجا یک سلسله فایل برای یک پروژه ساده است:
شاخه res/ شامل تمام منابع در زیرشاخههای گوناگون است. در اینجا ما یک منبع تصویر، دو منبع لایوت و یک رشته فایل داریم. جدول زیر جزئیاتی درباره منبع شاخههای پشتيبانى شده در داخل پروژه شاخهres/ به ما ارائه میدهد.
نوع منبع | شاخه |
فایلهای XML که ویژگی انیمیشنها را مشخص میکنند در پوشه /res/anim ذخیره شده هستند و در رده R.anim قابلیت دسترسی دارند. | anim |
فایلهای XML که وضعیت رنگها را مشخص میکنند در پوشه res/ color ذخیره شده هستند و در رده R.color قابلیت دسترسی دارند. | color |
فایلهای تصویری مانند png, .jpg, .gif یا فایلهای XML که در بیتمپها جمع شدهاند، لیستها، شکلها و قابلیت ترسیم انیمیشن را بیان میکنند. آنها در پوشه res/drawable/ ذخیره شدهاند و و در رده R.drawable قابلیت دسترسی دارند. | drawable |
فایلهای XML که میانجی Layout یک کاربر را مشخص میکنند، در پوشه res/layout/ ذخیره هستند و از طریق دسته R.layout قابلیت دسترسی دارند. | layout |
فایلهای XML از قبیل منوی گزینهها، منوی متن یا منو فرعی که منوهای نرمافزار را مشخص میکنند در پوشه در پوشه res/menu/ ذخیره هستند و از طریق دسته R.menu قابلیت دسترسی دارند. | menu |
فایلهای دلخواه برای ذخیره در شکل خام آنها. شما برای باز کردن چنین فایلهای خامی به فراخوانی Resources.openRawResource() با هویت منبع، که R.raw.filename است، احتیاج دارید. | raw |
فایلهای دلخواه XML که میتوانند در زمان اجرا با فراخوانی Resources.getXML() خوانده شوند. شما میتوانید فایلهای پیکربندی مختلفی را در اینجا ذخیره کنید که در زمان اجرا استفاده خواهند شد. | xml |
فایلهای XML از قبیل رشتهها، اعداد صحیح و رنگها که شامل ارزشهای ساده هستند. برای مثال، در اینجا بعضی اسم فایل قراردادی برای منابع وجود دارند که شما میتوانید در این شاخه ایجاد کنید: arrays.xml: برای آرایه های منابع و قابل دسترس از دسته R.array. integers.xml: برای اعداد صحیح منبع و قابل دسترس از دسته R.integer. bools.xml: برای عملگرهای منطقی منبع و قابل دسترس از دسته R.bool. colors.xml: برای ارزشهای رنگ و قابل دسترس از دسته R.color. dimens.xml: برای ارزشهای بُعد و قابل دسترس از دسته R.dimen. strings.xml : برای ارزشهای رشته و قابل دسترس از دسته R.string. styles.xml: برای سبکها و قابل دسترس از دسته R.style. | values |
منابع جایگزین
اپلیکیشن شما باید منایع جایگزین برای پشتیبانی تنظیمات دستگاه خاص فراهم کند. برای مثال، شما باید منابع جایگزین قابل Image (تصاویر) برای صفحه نمایش با وضوح مختلف و منابع جایگزین رشته برای زبانهای مختلف در نظر بگیرید. در زمان اجرا، اندروید تنظیمات دستگاه موجود را نشان میدهد و منابع مناسب را برای نرمافزار شما بارگذاری میکند.
برای مشخص کردن گزینه های پیکربندی خاص برای مجموعهای از منابع، مراحل زیر را دنبال کنید:
- یک شاخه جدید در res/ named در قالب <config_qualifier>– <resources_name> ایجاد کنید. در اینجا resources_name هر کدام از منابع ذکر شده در جدول بالا، مانند لایوت، قابل ترسیم و غیره خواهد بود. توصیفکننده (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 را برای زبان پیش فرض و 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
دسترسی Resource ها
در جریان ارتقا نرمافزار، شما احتیاج به دسترسی به منابع مشخص در کدتان یا در فایلهای Layout XML خواهید داشت. بخش بعدی، چگونگی دسترسی به منابعتان در هر دو زمینه را توضیح میدهد.
دسترسی Resource در کد
هنگامی که اپلیکیشن اندروید شما ساخته شد، یک طبقه R تولید میشود که شامل شناسههای منبع برای تمام منابع قابل دسترس در شاخه res/ شما است. شما میتوانید از طبقه R برای دسترسی به منبعی که از زیرشاخه استفاده میکند و نام منبع یا به طور مستقیم شناسه منبع استفاده کنید.
مثال:
برای دسترسی به 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 که قابل دسترس در زیرشاخه قابل ترسیم زیر /res است به دست آورد.
مثال:
به مثال بعدی ، جایی که res/values/strings.xml تعریف زیر را دارد توجه کنید:
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! را توضیح دادهام، یکبار دیگر مرور کنید مطمئن هستم تمام مفاهیم توضیح داده شده در این فصل را بهتر خواهید فهمید. بنابراین، من توصیه اکید میکنم فصل قبل را برای کار کردن مثال و درک چگونگی استفاده من از منابع مختلف در سطح خیلی ابتدایی بررسی کنید.
دیدگاهتان را بنویسید