একটি ভাল মানের অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করতে কোডিং ছাড়াও অনেক ধরণের আইটেম রয়েছে যা আপনি আপনার অ্যাপ্লিকেশণে ব্যবহার করেতে পারেন। যেমন বিটম্যাপস, কালার, লেআউট, ইউজার ইন্টারফেস স্ট্রিংস, অ্যানিমেশন ইন্সট্রাকশন এবং আরও অনেক কিছু। এই রিসোর্সগুলি সর্বদা প্রকল্পের res/ directory এর বিভিন্ন সাব ডিরেক্টরিতে আলাদাভাবে রক্ষণাবেক্ষণ করা হয়।
আমাদের এই টিউটোরিয়ালটির মাধ্যমে আপনি জানতে পারবেন; কীভাবে একটি অ্যাপ্লিকেশনে উক্ত রিসোর্সগুলি সংগঠিত করতে হয়, বিকল্প রিসোর্সগুলি কীভাবে নির্ধারণ করতে হয় এবং সর্বোপরি কিভাবে আপনি আপনার অ্যাপ্লিকেশন থেকে সেগুলি অ্যাক্সেস করবেন।
এন্ড্রয়েড স্টুডিওতে রিসোর্স অর্গানাইজ
MyProject/
app/
manifest/
AndroidManifest.xml
java/
MyActivity.java
res/
drawable/
icon.png
layout/
activity_main.xml
info.xml
values/
strings.xml
ক্রমিক |
ডিরেক্টরি এবং রিসোর্স টাইপ |
1 |
anim/ এক্সএমএল ফাইল যা অ্যানিমেশন প্রোপার্টি সংজ্ঞায়িত করে। এগুলি res/anim/ ফোল্ডারে সংরক্ষিত হয় এবং R.anim ক্লাস থেকে অ্যাক্সেস করা হয়। |
2 |
color/ এক্সএমএল ফাইল যা কালারের বিভিন্ন তালিকা নির্ধারণ করে। এগুলি res/color/ ফোল্ডারে সংরক্ষণ করা হয় এবং R.color ক্লাস থেকে অ্যাক্সেস করা হয়। |
3 |
drawable/ চিত্র ফাইল যেমন- .png, .jpg, .gif বা xml ফাইল যা বিটম্যাপস, স্টেট লিস্ট, শেপ, অ্যানিমেশন ড্রয়েবল ইত্যাদি ফাইলে রূপান্তরিত হয়। এগুলো res/drawable/ ফোল্ডারে সংরক্ষণ করা হয় এবং R.drawable ক্লাস থেকে অ্যাক্সেস করা হয়। |
4 |
layout/ এক্সএমএল ফাইল যা ইউজার ইন্টারফেস লেআউটকে সংজ্ঞায়িত করে। এগুলি res/layout/ ফোল্ডারে সংরক্ষণ করা হয় এবং R.layout ক্লাস থেকে অ্যাক্সেস করা হয়। |
5 |
menu/ এক্সএমএল ফাইল যা অ্যাপ্লিকেশন মেনুসমূহকে সংজ্ঞায়িত করে। যেমন-বিকল্প মেনু, প্রসঙ্গ মেনু বা সাব মেনু। এগুলি res/menu/ ফোল্ডারে সংরক্ষণ করা হয় এবং R.menu ক্লাস থেকে অ্যাক্সেস করা হয়। |
6 |
raw/ raw ফর্ম সংরক্ষণ করতে Arbitrary ফাইল।এই ধরণের raw ফাইল ওপেন করতে Resources.openRawResource() কে রিসোর্স আইডি R.raw.filename সহ কল করতে হবে |
7 |
values/ এক্সএমএল ফাইল যাতে স্ট্রিং, ইন্টিজার এবং কালারের মতো সাধারণ ভ্যালু রয়েছে। এই ডিরেক্টরিতে আপনি কি ধরণের রিসোর্স তৈরি করতে পারেন এমন কিছু ফাইলের নাম উদাহরণ হিসেবে দেওয়া হলো-
|
8 |
xml/ Arbitrary এক্সএমএল ফাইল এবং Resources.getXML () কে কল করে রানটাইমে এই সকল ফাইল রিড(read) করা যেতে পারে।। আপনি আপনার এপ্লিকেশনের জন্য এখানে বিভিন্ন কনফিগারেশন ফাইল সংরক্ষণ করতে পারেন যা রান টাইমে ব্যবহৃত হবে। |
বিকল্প রিসোর্স
আপনার অ্যাপ্লিকেশনটি নির্দিষ্ট কনফিগারেশনের ডিভাইসে সাপোর্ট করানোর জন্য বিকল্প রিসোর্স সরবরাহ করা উচিৎ। উদাহরণস্বরূপ, বিভিন্ন স্ক্রিন রেজোলিউশনের জন্য বিকল্প অংকনযোগ্য রিসোর্স (যেমন- ছবি) এবং বিভিন্ন ভাষার জন্য বিকল্প স্ট্রিং রিসোর্স অন্তর্ভুক্ত করা উচিত। রানটাইম এ, অ্যান্ড্রয়েড বর্তমান ডিভাইস কনফিগারেশন সনাক্ত করে এবং আপনার অ্যাপ্লিকেশনের জন্য উপযুক্ত রিসোর্সসমূহ লোড করে।
একের অধিক ডিভাইস কনফিগারেশনের সাথে সামঞ্জস্যপূর্ণ বিকল্প রিসোর্স সেট করতে নিম্নের পদক্ষেপগুলি অনুসরণ করুন -
- res/ ডিরেক্টরিতে <resources_name>-<config_qualifier> আকারে একটি নতুন ডিরেক্টরি তৈরি করুন। এখানে রিসোর্সের নামটি উপরের সারণীতে উল্লিখিত যে কোনও রিসোর্স যেমন layout, drawable, menu ইত্যাদি হতে পারে। qualifier একটি পৃথক কনফিগারেশন নির্দিষ্ট করে যার জন্য এই রিসোর্সগুলি ব্যবহার করা হবে। বিভিন্ন ধরণের রিসোর্সের জন্য qualifier এর সম্পূর্ণ তালিকা দেখতে অফিসিয়াল ডকুমেন্টেশন চেক করতে পারেন।
- এই নতুন ডিরেক্টরিতে বিকল্প রিসোর্সসমূহ সংরক্ষণ করুন। রিসোর্স ফাইলগুলি অবশ্যই নীচের উদাহরণে দেখানো ডিফল্ট রিসোর্স ফাইলগুলির মতো নামকরণ করতে হবে, তবে এই ফাইলগুলিতে বিকল্প রিসোর্সের সাথে সম্পর্কিত কন্টেন্টও থাকতে হবে। উদাহরণস্বরূপ যদিও চিত্রের ফাইলের নাম একই হবে তবে উচ্চ রেজোলিউশনের স্ক্রিনের জন্য, এর রেজোলিউশনটি বেশি হতে হবে।
নীচের উদাহরণে ডিফল্ট স্ক্রিনের জন্য এক ধরণের চিত্র এবং উচ্চ রেজোলিউশনের স্ক্রিনের জন্য বিকল্প চিত্র নির্ধারণ হয়।
নীচের উদাহরণে ডিফল্ট স্ক্রিনের জন্য এক ধরণের চিত্র এবং উচ্চ রেজোলিউশনের স্ক্রিনের জন্য বিকল্প চিত্র নির্ধারণ হয়।
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
রিসোর্স এক্সেস করা
আপনার অ্যাপ্লিকেশন বিকাশের(development) সময় নির্ধারিত রিসোর্সসমূহকে হয় আপনার কোড অথবা আপনার লেআউট এক্সএমএল ফাইল থেকে অ্যাক্সেস করতে পারবেন। উভয় পরিস্থিতিতে এই রিসোর্সসমূহকে অ্যাক্সেস করার পদ্ধতি নিম্নে ব্যাখ্যা করা হলোঃ -
কোড থেকে রিসোর্স এক্সেস করাঃ
যখন আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনটি প্রণীত(compiled) হয়, তখন স্বয়ংক্রিয়ভাবে একটি R ক্লাস উৎপন্ন হয় যা আপনার res/directory তে অবস্থিত সমস্ত রিসোর্সের রিসোর্স আইডি ধারণ করে। R ক্লাস ব্যবহার করে আপনি সাব-ডিরেক্টরি এবং রিসোর্স এর নাম বা সরাসরি রিসোর্স আইডি দিয়েও সেই রিসোর্স অ্যাক্সেস করতে পারেন।
উদাহরণ নিম্নের কোড থেকে আপনি res/drawable/myimage.png কে অ্যাক্সেস করতে এবং একটি ImageView সেট করতে পারবেন- ImageView imageView = (ImageView) findViewById(R.id.myimageview); imageView.setImageResource(R.drawable.myimage); এখানে একটি লেআউট ফাইলে myimageview আইডি দ্বারা নির্ধারিত ImageView কে এক্সেস করতে কোডের প্রথম লাইনে R.id.myimageview ব্যবহার করা হয়েছে। আর কোডের দ্বিতীয় লাইনটি /res এর অধীনে drawable সাব-ডিরেক্টরিতে অবস্থিত myimage নামের একটি চিত্র পেতে R.drawable.myimage ব্যবহার করা হয়েছে। ।
উদাহরণ
নিম্নলিখিত সংজ্ঞা সহ একটি লেআউট ফাইল (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>
নিচের অ্যাপ্লিকেশন কোড একটি এক্টিভিটির জন্য onCreate() মেথডে উপরের লেআউটটি লোড করবে -
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
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>
এখন আপনি টেক্সট কালার এবং টেক্সট স্ট্রিং রিসোর্সকে আপনার এপ্লিকেশনে সেট করতে নীচের লেআউট ফাইলটির ন্যায় ব্যবহার করতে পারেন -
<?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" />
এখন আপনি যদি পূনরায় আগের অধ্যায়ে ফিরে যান যেখানে হ্যালো ওয়ার্ল্ড এপ্লিকেশনটি ব্যাখ্যা করা হয়েছে। তবে আমি নিশ্চিত যে, এই অধ্যায়ে বর্ণিত সব টপিক্স সম্পর্কে আপনি আরও ভাল বুঝবেন। সুতরাং উদাহরণস্বরূপ কাজের জন্য আমি পূর্ববর্তী অধ্যায়টি পুনরায় যাচাই করার জন্য সুপারিশ করছি। সেখানে কীভাবে একেবারে প্রাথমিক স্তরের বিভিন্ন রিসোর্স ব্যবহার করা হয়েছে, তা দেখে আসুন।