একটি প্রাথমিক উইজেট তৈরি করা

'কম্পোজ' ফিচার ব্যবহার করে দেখুন
Jetpack Compose হল Android-এর জন্য সাজেস্ট করা UI টুলকিট। Compose-স্টাইল API ব্যবহার করে কীভাবে উইজেট তৈরি করতে হয় তা জানুন।

অ্যাপ উইজেট হল অ্যাপের ছোট ভিউ যা আপনি হোম স্ক্রিনের মতো অন্যান্য অ্যাপে এম্বেড করতে এবং পর্যায়ক্রমিক আপডেট পেতে পারেন। এইসব ভিউকে ইউজার ইন্টারফেসে উইজেট বলা হয় এবং আপনি অ্যাপ উইজেট প্রদানকারী (বা উইজেট প্রদানকারী)-এর মাধ্যমে একটি প্রকাশ করতে পারেন। অন্যান্য উইজেট ধারণ করে এমন অ্যাপ কম্পোনেন্টকে অ্যাপ উইজেট হোস্ট (বা উইজেট হোস্ট) বলা হয়। ছবি ১-এ একটি নমুনা মিউজিক উইজেট দেখানো হয়েছে:

মিউজিক উইজেটের উদাহরণ
ছবি ১. মিউজিক উইজেটের উদাহরণ।

এই ডকুমেন্টে কীভাবে উইজেট প্রদানকারী ব্যবহার করে উইজেট প্রকাশ করতে হয় তা বর্ণনা করা হয়েছে। অ্যাপ উইজেট হোস্ট করার জন্য আপনার নিজস্ব AppWidgetHost তৈরি করার বিষয়ে আরও জানতে, উইজেট হোস্ট তৈরি করুন দেখুন।

আপনার উইজেট কীভাবে ডিজাইন করবেন সেই সম্পর্কে তথ্য পেতে, অ্যাপ উইজেট ওভারভিউ দেখুন।

উইজেট কম্পোনেন্ট

উইজেট তৈরি করতে, আপনার নিম্নলিখিত মৌলিক উপাদানগুলি প্রয়োজন:

AppWidgetProviderInfo অবজেক্ট
কোনও উইজেটের মেটাডেটা বর্ণনা করে, যেমন উইজেটের লেআউট, আপডেট ফ্রিকোয়েন্সি এবং AppWidgetProvider ক্লাস। এই ডকুমেন্টে যেভাবে বর্ণনা করা হয়েছে, সেই অনুযায়ী AppWidgetProviderInfo XML-এ সংজ্ঞায়িত করা আছে।
AppWidgetProvider ক্লাস
উইজেটের সাথে প্রোগ্রাম্যাটিক ইন্টারফেস করার জন্য প্রয়োজনীয় প্রাথমিক পদ্ধতিগুলি নির্ধারণ করে। এর মাধ্যমে, উইজেট আপডেট, চালু, বন্ধ বা মুছে ফেলা হলে আপনি ব্রডকাস্ট পাবেন। এই ডকুমেন্টে যেভাবে বর্ণনা করা হয়েছে সেইভাবে ম্যানিফেস্টে AppWidgetProvider ঘোষণা করে তারপরে সেটি প্রয়োগ করুন।
লেআউট দেখুন
উইজেটের প্রাথমিক লেআউট নির্ধারণ করে। এই ডকুমেন্টে যেভাবে বর্ণনা করা হয়েছে, সেইভাবে XML-এ লেআউটকে ডিফাইন করা হয়।

এইসব কম্পোনেন্ট কীভাবে সামগ্রিক অ্যাপ উইজেট প্রসেসিং ফ্লোতে ফিট করে তা ২ নম্বর ছবিতে দেখানো হয়েছে।

অ্যাপ উইজেট প্রসেসিং ফ্লো
ছবি ২. অ্যাপ উইজেট প্রসেসিং ফ্লো।

আপনার উইজেটে ব্যবহারকারীর কনফিগারেশন প্রয়োজন হলে, অ্যাপ উইজেট কনফিগারেশন অ্যাক্টিভিটি প্রয়োগ করুন। এই অ্যাক্টিভিটি ব্যবহারকারীদের উইজেট সেটিংস পরিবর্তন করতে দেয়—যেমন, ক্লক উইজেটের টাইম জোন।

এছাড়াও, আমরা নিম্নলিখিত উন্নতিগুলি সাজেস্ট করি: ফ্লেক্সিবল উইজেট লেআউট, বিবিধ উন্নতি, উন্নত উইজেট, সংগ্রহ উইজেট এবং উইজেট হোস্ট তৈরি করা।

AppWidgetProviderInfo XML ঘোষণা করা

মেটাডেটা সেটিংস (যেমন, ডিফল্ট সেল সাইজ, সাইজ পরিবর্তন সংক্রান্ত বিধিনিষেধ এবং আপডেট ফ্রিকোয়েন্সি) নির্ধারণ করা, প্রথাগত ভিউ এবং এক ঝলকে-ভিত্তিক উইজেট, দু'টির ক্ষেত্রেই ঠিক একই রকম।

আপনার মেটাডেটা XML ফাইল কীভাবে ডিফাইন ও কনফিগার করবেন তা জানতে, Glance ডকুমেন্টে 'কম্পোজ-ফার্স্ট AppWidgetProviderInfo XML বিভাগ ঘোষণা করুন' দেখুন।

উইজেট ব্রডকাস্ট ম্যানেজ করতে AppWidgetProvider ক্লাস ব্যবহার করা

প্ল্যাটফর্মের ব্রডকাস্ট রিসিভার মেকানিক্স, ম্যানিফেস্ট ডিক্লারেশন ফিল্টার এবং লাইফসাইকেল ইভেন্ট লুপ প্ল্যাটফর্মের অধীনে একত্রিত করা হয়েছে। কম্পোজ-ফার্স্ট ডেভেলপমেন্টে, এইসব ব্রডকাস্টকে GlanceAppWidgetReceiver র‍্যাপার ব্যবহার করে অর্কেস্ট্রেট করা হয়।

ম্যানিফেস্টে আপনার রিসিভার কীভাবে রেজিস্টার করবেন এবং Hilt-এর সাথে মানানসই লাইফসাইকেল ওভাররাইড কীভাবে প্রয়োগ করবেন তা বুঝতে, Glance-এর ডকুমেন্টেশনে Compose-ফার্স্ট ব্রডকাস্ট হ্যান্ডেল করতে AppWidgetProvider ক্লাস ব্যবহার করুন বিভাগটি দেখুন।

উইজেট লেআউট তৈরি করা

আপনাকে অবশ্যই XML-এ উইজেটের প্রাথমিক লেআউট নির্ধারণ করতে হবে এবং এটি প্রজেক্টের res/layout/ ডিরেক্টরিতে সেভ করতে হবে। বিবরণের জন্য ডিজাইন নির্দেশিকা দেখুন।

আপনি যদি লেআউট সম্পর্কে পরিচিত হন, তাহলে উইজেট লেআউট তৈরি করা সহজ। তবে, মনে রাখবেন যে উইজেট লেআউট RemoteViews-এর উপর ভিত্তি করে তৈরি করা হয়, যা সব ধরনের লেআউট বা ভিউ উইজেট সাপোর্ট করে না। আপনি RemoteViews-এর দ্বারা কাজ করে এমন কাস্টম ভিউ বা ভিউয়ের সাবক্লাস ব্যবহার করতে পারবেন না।

RemoteViews ViewStub-এও কাজ করে, এটি হল একটি অদৃশ্য, শূন্য-সাইজের View যা আপনি রানটাইমে লেআউট রিসোর্স অলসভাবে ইনফলেটের জন্য ব্যবহার করতে পারেন।

স্টেটফুল আচরণের জন্য সহায়তা

Android 12-এ নিম্নলিখিত বিদ্যমান কম্পোনেন্ট ব্যবহার করে স্টেটফুল আচরণের জন্য সহায়তা যোগ করা হয়েছে:

উইজেটটি এখনও স্টেটলেস আছে। আপনার অ্যাপকে অবশ্যই স্টেট সেভ করতে হবে এবং স্টেট পরিবর্তন ইভেন্টের জন্য রেজিস্টার করতে হবে।

স্টেটফুল আচরণ দেখানো শপিং লিস্ট উইজেটের উদাহরণ
ছবি ৩. স্টেটফুল আচরণের উদাহরণ।

নিচের কোডের উদাহরণ থেকে কীভাবে এইসব কম্পোনেন্ট প্রয়োগ করতে হয় তা জানতে পারবেন।

// Check the view.
remoteView.setCompoundButtonChecked(R.id.my_checkbox, true)

// Check a radio group.
remoteView.setRadioGroupChecked(R.id.my_radio_group, R.id.radio_button_2)

// Listen for check changes. The intent has an extra with the key
// EXTRA_CHECKED that specifies the current checked state of the view.
remoteView.setOnCheckedChangeResponse(
    R.id.my_checkbox,
    RemoteViews.RemoteResponse.fromPendingIntent(onCheckedChangePendingIntent)
)

দুটি লেআউট দিন: একটি res/layout-v31-এ Android 12 বা এর পরের যেকোনও ভার্সনে চলে এমন ডিভাইসকে টার্গেট করে এবং অন্যটি ডিফল্ট res/layout ফোল্ডারে Android 11 বা এর আগের যেকোনও ভার্সনে চলে এমন ডিভাইসকে টার্গেট করে।

গোলাকার কোণ প্রয়োগ করা

বাইরের ব্যাকগ্রাউন্ড ও ভিতরের আনুপাতিক ব্যাসার্ধ গণনা করার পদ্ধতি স্ট্যান্ডার্ড ও শেয়ার করা হয়। Compose-ফার্স্ট ডেভেলপমেন্টে, এটি কাস্টম থিম রিসোর্সের পাশাপাশি Kotlin-এ ডায়নামিক সেট করা যেতে পারে।

পুরনো Android ডিভাইসের জন্য কর্নার রেডিয়াস প্রয়োগ করতে বা ডায়নামিক স্টাইল সেট-আপ করতে, Glance ডকুমেন্টে Compose-ফার্স্ট রাউন্ডেড কর্নার প্রয়োগ করুন বিভাগ দেখুন।