موارد بسیار بیشتری وجود دارد که از آنها برای ساختن یک برنامه اندروید خوب استفاده می کنید یکی از این موارد سازماندهی و دسترسی به منابع میباشد. جدا از کدنویسی برای برنامه، شما از منابع مختلف دیگری مانند محتوای ثابتی که کد شما استفاده میکند، مراقبت میکنید، مانند بیت مپ، رنگها، تعاریف طرحبندی، رشتههای رابط کاربری، دستورالعملهای انیمیشن و موارد دیگر. این منابع همیشه به طور جداگانه در زیر شاخه های مختلف تحت res نگهداری می شوند.
این آموزش به شما توضیح می دهد که چگونه می توانید منابع برنامه خود را در اندروید سازماندهی کنید، منابع جایگزین را مشخص کنید و در برنامه های خود به آنها دسترسی داشته باشید.
سازماندهی و دسترسی به منابع در اندروید
MyProject/ app/ manifest/ AndroidManifest.xml java/ MyActivity.java res/ font/ font.ttf drawable/ icon.png layout/ activity_main.xml info.xml values/ strings.xml
لیست کامل را در پایین آورده ایم:
مسیر و نوع منبع | ردیف |
anim/
فایل های XML که انیمیشن های ویژگی را تعریف می کنند. آنها در پوشه res/anim/ ذخیره می شوند و در کلاس ها با استفاده از R.anim قابل دسترسی هستند. |
1 |
color/
فایل های XML که لیست حالتی از رنگ ها را تعریف می کنند. آنها در res/color/ ذخیره می شوند و در کلاس ها با استفاده از R.color قابل دسترسی هستند. |
2 |
drawable/
فایلهای تصویری مانند فایلهای png.، jpg، .gif یا XML که به صورت بیت مپ، فهرست وضعیت، شکلها، انیمیشنهای قابل ترسیم کامپایل میشوند. آنها در res/drawable/ ذخیره می شوند و در کلاس ها با استفاده از R.drawable قابل دسترسی هستند. |
3 |
layout/
فایل های XML که یک طرح رابط کاربری را تعریف می کنند. آنها در res/layout/ ذخیره می شوند و در کلاس ها با استفاده از R.layout قابل دسترسی هستند. |
4 |
menu/
فایلهای XML که منوهای برنامه را تعریف میکنند، مانند منوی گزینهها، منوی زمینه یا منوی فرعی. آنها در res/menu/ ذخیره می شوند و در کلاس ها با استفاده از R.menu قابل دسترسی هستند. |
5 |
raw/
فایل های دلخواه برای ذخیره به شکل خام در مسیر res/raw/ ذخیره میشوند. برای باز کردن فایلهای خام، باید متد Resources.openRawResource() را با شناسه منبع، که R.raw.filename است فراخوانی کنید. |
6 |
values/
فایل های XML که حاوی مقادیر ساده مانند رشته ها، اعداد صحیح و رنگ ها هستند. |
7 |
font/
فایل مربوط به فونت ها با پسوند tff در مسیر res/font/ ذخیره میشود. و در کلاس ها با استفاده از R.font قابل دسترسی است. |
8 |
xml/
فایل های XML دلخواه که در زمان اجرا با فراخوانی Resources.getXML() قابل خواندن هستند. شما می توانید فایل های پیکربندی مختلفی را در اینجا ذخیره کنید که در زمان اجرا مورد استفاده قرار می گیرند. |
9 |
منبع values
به عنوان مثال، در اینجا برخی از قراردادهای نام فایل برای منابعی که می توانید در این دایرکتوری ایجاد کنید وجود دارد:
- 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 قابل دسترسی است.
منابع جایگزین
برنامه شما باید منابع جایگزینی برای پشتیبانی از تنظیمات دستگاه خاص ارائه دهد. یعنی سیستم عامل اندروید منابعی که قبلا سازماندهی کردید را به آن دسترسی پیدا میکند. به عنوان مثال، شما باید منابع قابل ترسیم جایگزین (یعنی تصاویر) را برای وضوح صفحه نمایش مختلف و منابع رشته جایگزین برای زبان های مختلف قرار دهید. در زمان اجرا، Android پیکربندی دستگاه فعلی را شناسایی کرده و منابع مناسب را برای برنامه شما بارگیری می کند.
برای تعیین گزینههای خاص پیکربندی برای مجموعهای از منابع، مراحل زیر را دنبال کنید :
- یک دایرکتوری جدید در res/ با نام <resources_name>-<config_qualifier> ایجاد کنید. در اینجا resources_name هر یک از منابع ذکر شده در جدول بالا خواهد بود، مانند 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 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
دسترسی به منابع
در طول توسعه برنامه شما باید به منابع تعریف شده در کد خود یا در فایل های XML طرح بندی خود دسترسی داشته باشید. بخش زیر نحوه دسترسی به منابع خود را در هر دو سناریو توضیح می دهد.
دسترسی به منابع در کد
هنگامی که برنامه اندروید شما کامپایل می شود، یک کلاس R ایجاد می شود که حاوی شناسه های منبع برای تمام منابع موجود در دایرکتوری res/ شما است. میتوانید از طریق کلاس R برای دسترسی به آن منبع با استفاده از فهرست فرعی و نام منبع یا شناسه مستقیم منبع استفاده کنید.
مثال
برای دسترسی به 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 در زیر شاخه قابل ترسیم در زیر /res استفاده می کند.
مثال
مثال بعدی را در نظر بگیرید که در آن res/values/strings.xml دارای تعریف زیر است:
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello, World!</string> </resources>
اکنون می توانید متن را روی یک شی TextView با پیام ID با استفاده از شناسه منبع به صورت زیر تنظیم کنید:
TextView msgTextView = 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>
این کد برنامه این طرح بندی را برای یک Activity در متد onCreate() به صورت زیر بارگیری می کند:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
دسترسی به منابع در 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" />