سازماندهی و دسترسی به ریسورس ها در اندروید

سازماندهی و دسترسی به ریسورس ها در اندروید
آیتم های زیادی وجود دارد که شما باید برای ایجاد یک اپلیکیشن اندروید خوب از آنها استفاده می کنید. جدا از کد نویسی برای اپلیکیشن، شما باید حساب ریسورس ها یا همان منابع مختلف دیگری مانند محتوای ایستا از قبیل تصاویر، رنگ ها، تعریف لایه ها، رشته های رابط کاربری، دستورالعمل های انیمیشن و … که کدتان از آنها استفاده می کند را بکنید. این ریسورس ها همیشه به صورت جدا در پوشه های مختلف درون پوشه 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 ی که حاوی مقادیر ساده از قبیل رشته ها، اعداد و رنگ ها می باشد. برای مثال در زیر فایل هایی که شما می توانید در این پوشه ایجاد کنید را آورده ام.

  • 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 قابل دسترس خواهند بود.
۸ 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 را توضیح داده ایم را  مطالعه کنید مطمئنم که درک بهتری از همه  مفاهیمی که در این آموزش داده شد پیدا خواهید کرد. پس من شدیدا بررسی آموزش قبلی سایت را به شما توصیه می کنم تا هم یک مثال انجام دهید و بررسی کنید که چطور از ریسورس های مختلف در ابتدایی ترین سطح استفاده کنید.

 

امید فرجی

سلام، امید فرجی هستم از همدان. بیشتر از 7 سال میشه که در حوضه برنامه نویسی جاوا و اندروید فعالیت دارم و در این مدت پروژه های تجاری مختلفی انجام دادم. همچنین از سال 91 سایت آموزش تخصصی جاوا را راه اندازی کردم و در خدمت شما هستم. امیدوارم مفید بوده باشم. برای سفارش پروژه هاتون باهام تماس بگیرید.

شما ممکن است این را هم بپسندید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

اگر به دنبال پروژه های آماده هستید از فروشگاه ما دیدن کنید رد کردن