ধারণা ও Jetpack Compose-এর প্রয়োগ
Android Studio tools নেমস্পেসে বিভিন্ন ধরনের XML অ্যাট্রিবিউট সাপোর্ট করে
যা ডিজাইন-টাইম ফিচার চালু করে, যেমন ফ্র্যাগমেন্টে কোন লেআউট দেখাতে হবে অথবা
কম্পাইল-টাইম আচরণ, যেমন আপনার XML রিসোর্সে কোন শ্রিঙ্কিং মোড প্রয়োগ করতে হবে। আপনি অ্যাপ তৈরি করার সময়, বিল্ড টুল এইসব অ্যাট্রিবিউট সরিয়ে দেয় যাতে
আপনার APK সাইজ বা রানটাইম আচরণে কোনও প্রভাব না পড়ে।
এইসব অ্যাট্রিবিউট ব্যবহার করতে, প্রতিটি XML ফাইলের রুট এলিমেন্টে tools নেমস্পেস যোগ করুন
যেখানে আপনি সেগুলি ব্যবহার করতে চান, যেমন এখানে দেখানো হয়েছে:
<RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >
সমস্যা ম্যানেজ করার অ্যাট্রিবিউট
নিম্নলিখিত অ্যাট্রিবিউট লিন্ট সংক্রান্ত সতর্কতামূলক মেসেজ দমন করতে সাহায্য করে:
tools:targetApi
উদ্দেশ্য: যেকোনও এলিমেন্ট
ব্যবহার করে: Lint
এই অ্যাট্রিবিউট Java কোডে @TargetApi অ্যানোটেশনের মতোই কাজ করে। এটি আপনাকে API লেভেল (পূর্ণসংখ্যা বা কোড নেম হিসেবে) নির্দিষ্ট করতে দেয়
যা এই এলিমেন্টকে সাপোর্ট করে।
এটি টুলকে জানায় যে আপনি বিশ্বাস করেন যে এই এলিমেন্ট এবং যেকোনও চাইল্ড এলিমেন্ট
শুধুমাত্র নির্দিষ্ট API লেভেল বা তার থেকে বেশি লেভেলে ব্যবহার করা হয়। আপনার minSdkVersion হিসেবে উল্লেখ করা API লেভেলে
সেই এলিমেন্ট বা তার অ্যাট্রিবিউট উপলভ্য না থাকলে,
এটি লিন্টকে আপনাকে সতর্ক করা থেকে আটকায়।
যেমন, আপনি এই অ্যাট্রিবিউট ব্যবহার করতে পারেন কারণ GridLayout শুধুমাত্র
API লেভেল ১৪ এবং তার থেকে উন্নত ভার্সনে উপলভ্য, তবে আপনি জানেন যে এই লেআউট আপনার কোডে
কোনও নিম্ন ভার্সনের জন্য ব্যবহার করা হয় না:
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:targetApi="14" >
(তবে, মনে রাখবেন যে আমরা আপনাকে সহায়তা লাইব্রেরি থেকে
GridLayout ব্যবহার করার সাজেশন দিই।)
ডিজাইন-টাইম ভিউ অ্যাট্রিবিউট
নিম্নলিখিত অ্যাট্রিবিউটগুলি লেআউটের বৈশিষ্ট্যগুলি সংজ্ঞায়িত করে যা শুধুমাত্র Android Studio লেআউট প্রিভিউতে দেখা যায়।
android:-এর পরিবর্তে tools:
এর জন্য: <View>
ব্যবহার করে: Android Studio লেআউট এডিটর
Android ফ্রেমওয়ার্ক থেকে যেকোনও <View> অ্যাট্রিবিউটের সাথে android:-এর পরিবর্তে tools: প্রিফিক্স ব্যবহার করে
আপনি লেআউট প্রিভিউতে স্যাম্পেল ডেটা যোগ করতে পারবেন।
রানটাইম পর্যন্ত অ্যাট্রিবিউটের ভ্যালু পপুলেট না হলে এবং আপনি লেআউট প্রিভিউতে এফেক্ট দেখতে চাইলে এটি কাজে লাগে।
যেমন, রানটাইমে android:text অ্যাট্রিবিউট ভ্যালু সেট করা হলে অথবা
আপনি ডিফল্ট ভ্যালু থেকে আলাদা কোনও ভ্যালু সহ লে-আউট দেখতে চাইলে,
লে-আউট প্রিভিউয়ের জন্য কিছু টেক্সট নির্দিষ্ট করতে tools:text যোগ করতে পারেন।
tools:text
অ্যাট্রিবিউট লেআউট প্রিভিউয়ের জন্য "Google Voice" ভ্যালু হিসেবে সেট করে।আপনি android: নেমস্পেস অ্যাট্রিবিউট, যা রানটাইমে ব্যবহার করা হয় এবং ম্যাচিং tools: অ্যাট্রিবিউট, যা শুধুমাত্র লেআউট প্রিভিউতে রানটাইম অ্যাট্রিবিউট ওভাররাইড করে, দুটিই যোগ করতে পারবেন।
এছাড়াও, আপনি শুধুমাত্র লেআউট প্রিভিউয়ের জন্য অ্যাট্রিবিউট সেটিং আগের অবস্থায় ফিরিয়ে আনতে tools: অ্যাট্রিবিউট ব্যবহার করতে পারেন। যেমন, আপনার যদি দুটি চাইল্ড সহ একটি FrameLayout থাকে
কিন্তু আপনি লেআউট প্রিভিউতে শুধুমাত্র একটি চাইল্ড দেখতে চান, তাহলে আপনি
লেআউট প্রিভিউতে তাদের মধ্যে একটিকে অদৃশ্য হিসেবে সেট করতে পারেন, যেমন এখানে দেখানো হয়েছে:
<Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="First" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Second" tools:visibility="invisible" />
ডিজাইন ভিউতে লেআউট এডিটর ব্যবহার করার সময়, প্রপার্টি উইন্ডো আপনাকে কিছু ডিজাইন-টাইম ভিউ অ্যাট্রিবিউট এডিট করতে দেয়। প্রতিটি ডিজাইন-টাইম অ্যাট্রিবিউটকে
অ্যাট্রিবিউটের নামের পাশে রেঞ্চ আইকন
দিয়ে চিহ্নিত করা হয়
যাতে একই নামের আসল অ্যাট্রিবিউট থেকে এটিকে আলাদা করা যায়।
tools:context
এর জন্য: যেকোনও রুট <View>
ব্যবহার করে: Lint, Android Studio লেআউট এডিটর
এই অ্যাট্রিবিউট ঘোষণা করে যে এই লেআউটটি ডিফল্টভাবে কোন অ্যাক্টিভিটির সাথে যুক্ত। এটি এডিটর বা লেআউট প্রিভিউতে এমন ফিচার চালু করে যার জন্য অ্যাক্টিভিটি সম্পর্কে
জানতে হয়, যেমন প্রিভিউতে লেআউট থিম কী এবং কুইকফিক্স থেকে তৈরি করা
onClick হ্যান্ডলার কোথায় যোগ করতে হবে, যেমন ছবি ২-এ দেখানো হয়েছে।
onClick
অ্যাট্রিবিউটের জন্য কুইকফিক্স তখনই কাজ করে যদি আপনি tools:context সেট করে থাকেন।আপনি ম্যানিফেস্ট ফাইলের (সম্পূর্ণ প্যাকেজের নাম বাদ দিয়ে) মতো একই ডট প্রিফিক্স ব্যবহার করে অ্যাক্টিভিটি ক্লাস নেম নির্দিষ্ট করতে পারেন।
যেমন:
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context=".MainActivity" >
tools:itemCount
এর জন্য: <RecyclerView>
ব্যবহার করে: Android Studio লেআউট এডিটর
প্রদত্ত RecyclerView-এর জন্য এই অ্যাট্রিবিউটটি আইটেমের সংখ্যা নির্দিষ্ট করে যা
লেআউট এডিটরকে প্রিভিউ উইন্ডোতে রেন্ডার করতে হবে।
যেমন:
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:itemCount="3"/>
tools:layout
এর জন্য: <fragment>
ব্যবহার করে: Android Studio লেআউট এডিটর
এই অ্যাট্রিবিউটটি ঘোষণা করে যে আপনি ফ্র্যাগমেন্টের মধ্যে কোন লেআউট প্রিভিউ আঁকতে চান কারণ লেআউট প্রিভিউ সাধারণত লেআউট প্রয়োগ করে এমন অ্যাক্টিভিটি কোড এক্সিকিউট করতে পারে না।
যেমন:
<fragment android:name="com.example.main.ItemListFragment"
tools:layout="@layout/list_content" />
tools:listitem, tools:listheader, tools:listfooter
এর জন্য: <AdapterView> (এবং <ListView>-এর মতো সাবক্লাস)
ব্যবহার করে: Android Studio লেআউট এডিটর
এই অ্যাট্রিবিউটগুলি নির্দিষ্ট করে যে তালিকার আইটেম, হেডার এবং ফুটারের জন্য লেআউট প্রিভিউতে কোন লেআউট দেখাতে হবে। লেআউটের যেকোনও ডেটা ফিল্ডে সংখ্যাসূচক কন্টেন্ট, যেমন "আইটেম ১" দিয়ে পূরণ করা হয়, যাতে তালিকার আইটেমগুলি পুনরাবৃত্তিমূলক না হয়।
যেমন:
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/sample_list_item"
tools:listheader="@layout/sample_list_header"
tools:listfooter="@layout/sample_list_footer" />
tools:showIn
উদ্দেশ্য: লেআউটে যেকোনও রুট <View> যা <include> দ্বারা রেফার করা হয়
ব্যবহার করে: Android Studio লেআউট এডিটর
এই অ্যাট্রিবিউট আপনাকে এমন একটি লেআউট নির্দেশ করতে দেয় যা
<include> ব্যবহার করে এই লেআউটটি ব্যবহার করে, যাতে আপনি
এই ফাইলটি প্রিভিউ এবং এডিট করতে পারেন কারণ এটি তার পেরেন্ট লেআউটে এম্বেড করা অবস্থায় দেখা যায়।
যেমন:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:showIn="@layout/activity_main" />
এখন লে-আউট প্রিভিউতে এই TextView লে-আউটটি এমনভাবে দেখানো হয় যাতে এটি
activity_main লে-আউটের মধ্যে দেখা যায়।
tools:menu
এর জন্য: যেকোনও রুট <View>
ব্যবহার করে: Android Studio লেআউট এডিটর
এই অ্যাট্রিবিউট নির্দিষ্ট করে যে লেআউট প্রিভিউ অ্যাপ বারে কোন মেনু দেখায়। ভ্যালু হল এক বা একাধিক মেনু আইডি,
যা কমা দিয়ে আলাদা করা, @menu/ বা এই ধরনের কোনও আইডি প্রিফিক্স এবং
.xml এক্সটেনশন ছাড়া।
যেমন:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:menu="menu1,menu2" />
tools:minValue, tools:maxValue
এর জন্য: <NumberPicker>
ব্যবহার করে: Android Studio লেআউট এডিটর
এইসব অ্যাট্রিবিউট NumberPicker ভিউয়ের জন্য ন্যূনতম ও সর্বাধিক ভ্যালু সেট করে।
যেমন:
<NumberPicker xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/numberPicker"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:minValue="0"
tools:maxValue="10" />
tools:openDrawer
এর জন্য: <DrawerLayout>
ব্যবহার করে: Android Studio লেআউট এডিটর
এই অ্যাট্রিবিউট আপনাকে প্রিভিউতে DrawerLayout খুলতে দেয়।
এছাড়াও, নিম্নলিখিত মানগুলির মধ্যে একটি পাস করে লেআউট এডিটর কীভাবে লেআউট রেন্ডার করে তা আপনি পরিবর্তন করতে পারেন:
টেবিল ১. লেআউট এডিটর কীভাবে DrawerLayout রেন্ডার করে তা পরিবর্তন করার ভ্যালু
| স্থির | মান | বর্ণনা |
|---|---|---|
end | 800005 | অবজেক্টের সাইজ পরিবর্তন না করে, কন্টেনারের শেষ প্রান্তে অবজেক্টটি পুশ করুন। |
left | 3 | অবজেক্টের সাইজ পরিবর্তন না করে, সেটিকে কন্টেনারের বাঁদিকে ঠেলে দিন। |
right | 5 | অবজেক্টের সাইজ পরিবর্তন না করে, কন্টেনারের ডানদিকে অবজেক্ট পুশ করুন। |
start | 800003 | অবজেক্টকে তার কন্টেনারের শুরুতে পুশ করুন, এর সাইজ পরিবর্তন করবেন না। |
যেমন:
<androidx.drawerlayout.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:openDrawer="start" />
"@tools:sample/*" রিসোর্স
উদ্দেশ্য: UI টেক্সট বা ছবি কাজ করে এমন যেকোনও ভিউ
ব্যবহার করে: Android Studio লেআউট এডিটর
এই অ্যাট্রিবিউট আপনাকে ভিউতে প্লেসহোল্ডার ডেটা বা ছবি ইনজেক্ট করতে দেয়। যেমন, আপনার অ্যাপের জন্য UI টেক্সট চূড়ান্ত করার আগে, টেক্সটের সাথে আপনার লেআউট কেমন দেখায় তা পরীক্ষা করতে, আপনি নিম্নলিখিত উপায়ে প্লেসহোল্ডার টেক্সট ব্যবহার করতে পারেন:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="@tools:sample/lorem" />
আপনার লেআউটে যে ধরনের প্লেসহোল্ডার ডেটা যোগ করতে পারবেন, নিচের সারণীতে তা বর্ণনা করা হয়েছে:
সারণী ২. লেআউটের জন্য প্লেসহোল্ডার ডেটা
| অ্যাট্রিবিউট ভ্যালু | প্লেসহোল্ডার ডেটার বিবরণ |
|---|---|
@tools:sample/full_names |
@tools:sample/first_names এবং
@tools:sample/last_names-এর কম্বিনেশন থেকে
র্যান্ডমভাবে জেনারেট করা সম্পূর্ণ নাম |
@tools:sample/first_names |
সাধারণ প্রথম নাম |
@tools:sample/last_names |
সাধারণ পদবি |
@tools:sample/cities |
বিশ্বের বিভিন্ন শহরের নাম |
@tools:sample/us_zipcodes |
র্যান্ডম উপায়ে তৈরি মার্কিন যুক্তরাষ্ট্রের পিন কোড |
@tools:sample/us_phones |
নিম্নলিখিত ফর্ম্যাট সহ র্যান্ডম উপায়ে তৈরি ফোন নম্বর:
(800) 555-xxxx |
@tools:sample/lorem |
ল্যাটিনে প্লেসহোল্ডার টেক্সট |
@tools:sample/date/day_of_week |
নির্দিষ্ট ফর্ম্যাটের জন্য র্যান্ডমাইজ করা তারিখ ও সময় |
@tools:sample/date/ddmmyy | |
@tools:sample/date/mmddyy | |
@tools:sample/date/hhmm | |
@tools:sample/date/hhmmss | |
@tools:sample/avatars |
প্রোফাইল অবতার হিসেবে ব্যবহার করার জন্য ভেক্টর ড্রয়েবেল |
@tools:sample/backgrounds/scenic |
ব্যাকগ্রাউন্ড হিসেবে ব্যবহার করতে পারবেন এমন ছবি |