আপনার অ্যাপের উইজেট পিকারের অভিজ্ঞতা উন্নত করতে, অ্যান্ড্রয়েড ১৫ এবং তার পরবর্তী সংস্করণগুলোর জন্য একটি জেনারেটেড উইজেট প্রিভিউ, অ্যান্ড্রয়েড ১২ থেকে অ্যান্ড্রয়েড ১৪ ডিভাইসগুলোর জন্য একটি স্কেলড উইজেট প্রিভিউ ( previewLayout নির্দিষ্ট করে), এবং পূর্ববর্তী সংস্করণগুলোর জন্য একটি previewImage প্রদান করুন।
জেনারেটেড উইজেট প্রিভিউ আপনাকে আপনার উইজেটগুলির জন্য ডাইনামিক, ব্যক্তিগতকৃত প্রিভিউ তৈরি করার সুযোগ দেয়, যা ব্যবহারকারীর হোম স্ক্রিনে উইজেটটি কেমন দেখাবে তা নির্ভুলভাবে প্রতিফলিত করে। অ্যান্ড্রয়েড ১৫ এবং তার পরবর্তী সংস্করণগুলির জন্য, এগুলি একটি পুশ এপিআই (push API)-এর মাধ্যমে সরবরাহ করা হয়, যার অর্থ হলো আপনার অ্যাপ উইজেট হোস্টের কাছ থেকে কোনো সুস্পষ্ট অনুরোধ না পেয়েই তার লাইফসাইকেলের যেকোনো পর্যায়ে প্রিভিউটি প্রদর্শন করতে পারে।
আরও তথ্যের জন্য, ইউটিউবে ‘লাইভ আপডেট এবং উইজেট দিয়ে আপনার অ্যাপকে সমৃদ্ধ করুন’ দেখুন।
তৈরি করা প্রিভিউ যোগ করুন
অ্যান্ড্রয়েড ১৫ বা তার পরবর্তী সংস্করণের ডিভাইসে জেনারেটেড উইজেট প্রিভিউ দেখানোর জন্য, প্রথমে মডিউলের build.gradle ফাইলে compileSdk মান ৩৫ বা তার বেশি সেট করুন, যাতে উইজেট পিকার-এ RemoteViews সরবরাহ করার ক্ষমতা পাওয়া যায়।
অ্যাপগুলো AppWidgetManager এ setWidgetPreview ব্যবহার করতে পারে। এর অপব্যবহার রোধ করতে এবং সিস্টেমের স্বাস্থ্য সংক্রান্ত উদ্বেগ প্রশমিত করার জন্য, setWidgetPreview একটি রেট-লিমিটেড এপিআই। এর ডিফল্ট সীমা হলো প্রতি ঘণ্টায় প্রায় দুটি কল।
প্রিভিউ দেখানোর জন্য সিস্টেম থেকে কোনো কলব্যাক নেই, তাই আপনার অ্যাপকেই সিদ্ধান্ত নিতে হবে কখন setWidgetPreviews কল করা হবে। আপডেটের কৌশলটি আপনার উইজেটের ব্যবহারের ধরনের উপর নির্ভর করে:
- উইজেটটিতে যদি স্থির তথ্য থাকে বা এটি কোনো দ্রুত ক্রিয়াকলাপ হয়, তাহলে অ্যাপটি প্রথমবার চালু করার সময় প্রিভিউ সেট করুন।
- আপনার অ্যাপে ডেটা তৈরি হয়ে গেলে আপনি প্রিভিউ সেট করতে পারেন; যেমন, কোনো ব্যবহারকারী সাইন-ইন করার পর বা প্রাথমিক সেটআপের পরে।
- আপনি একটি নির্বাচিত ব্যবধানে প্রিভিউগুলো আপডেট করার জন্য একটি পর্যায়ক্রমিক টাস্ক সেট আপ করতে পারেন।
নিম্নলিখিত উদাহরণটি একটি XML উইজেট লেআউট রিসোর্স লোড করে এবং সেটিকে প্রিভিউ হিসেবে সেট করে। এই কোড স্নিপেটে setWidgetPreview একটি মেথড হিসেবে দেখানোর জন্য compileSdk বিল্ড সেটিং ৩৫ বা তার পরবর্তী সংস্করণ প্রয়োজন।
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
ExampleAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
স্কেলেবল উইজেট প্রিভিউ যোগ করুন
অ্যান্ড্রয়েড ১২ থেকে, উইজেট পিকার-এ প্রদর্শিত উইজেট প্রিভিউটি স্কেলেবল বা পরিবর্তনযোগ্য। আপনি এটিকে উইজেটের ডিফল্ট আকারে সেট করা একটি XML লেআউট হিসেবে প্রদান করেন। পূর্বে, উইজেট প্রিভিউটি একটি স্ট্যাটিক ড্রয়েবল রিসোর্স ছিল, যার ফলে কিছু ক্ষেত্রে হোম স্ক্রিনে উইজেটগুলো যুক্ত করার পর সেগুলোর আসল রূপ প্রিভিউতে সঠিকভাবে প্রতিফলিত হতো না।
স্কেলেবল উইজেট প্রিভিউ বাস্তবায়ন করতে, এর পরিবর্তে একটি XML লেআউট সরবরাহ করার জন্য appwidget-provider এলিমেন্টের previewLayout অ্যাট্রিবিউটটি ব্যবহার করুন:
<appwidget-provider
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
আমরা আসল উইজেটের লেআউটটিই ব্যবহার করার পরামর্শ দিই, যেখানে বাস্তবসম্মত ডিফল্ট বা পরীক্ষার মান থাকবে। বেশিরভাগ অ্যাপ একই previewLayout এবং initialLayout ব্যবহার করে। সঠিক প্রিভিউ লেআউট তৈরির নির্দেশনার জন্য, “Build accurate previews that include dynamic items ” দেখুন।
আমরা previewLayout এবং previewImage উভয় অ্যাট্রিবিউটই নির্দিষ্ট করার পরামর্শ দিই, যাতে ব্যবহারকারীর ডিভাইস previewLayout সমর্থন না করলে আপনার অ্যাপ স্বয়ংক্রিয়ভাবে previewImage ব্যবহার করতে পারে। previewLayout অ্যাট্রিবিউটটি previewImage অ্যাট্রিবিউটের চেয়ে অগ্রাধিকার পায়।
পূর্ববর্তী সংস্করণের সাথে সামঞ্জস্যের জন্য স্ট্যাটিক উইজেট প্রিভিউ যোগ করুন
অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) বা তার নিচের সংস্করণে উইজেট পিকারগুলিতে আপনার উইজেটের প্রিভিউ দেখানোর জন্য, অথবা স্কেলেবল প্রিভিউয়ের ফলব্যাক হিসেবে, previewImage অ্যাট্রিবিউটটি নির্দিষ্ট করুন।
উইজেটটির চেহারা পরিবর্তন করলে, প্রিভিউ ছবিটি আপডেট করুন।
আপনি যদি setWidgetPreview ব্যবহার করে কোনো প্রিভিউ সেট না করে থাকেন, তাহলে জেনারেট করা প্রিভিউয়ের জন্য ফলব্যাক হিসেবেও এই অ্যাট্রিবিউটটি ব্যবহৃত হয়।
ডাইনামিক আইটেম অন্তর্ভুক্ত করে নির্ভুল প্রিভিউ তৈরি করুন।

এই বিভাগে কালেকশন ভিউ সহ কোনো উইজেটের (অর্থাৎ, যে উইজেট ListView , GridView বা StackView ব্যবহার করে) প্রিভিউতে একাধিক আইটেম প্রদর্শনের জন্য প্রস্তাবিত পদ্ধতি ব্যাখ্যা করা হয়েছে। এটি স্কেলেবল উইজেট প্রিভিউয়ের ক্ষেত্রে প্রযোজ্য, জেনারেটেড প্রিভিউয়ের ক্ষেত্রে নয়।
আপনার উইজেট যদি এই ভিউগুলোর কোনো একটি ব্যবহার করে, তাহলে previewLayout এ সরাসরি প্রকৃত উইজেট লেআউট দিয়ে একটি স্কেলেবল প্রিভিউ তৈরি করলে অভিজ্ঞতার অবনতি ঘটতে পারে, বিশেষ করে যখন উইজেট প্রিভিউতে কোনো আইটেম প্রদর্শিত হয় না। এমনটা ঘটে কারণ কালেকশন ভিউ ডেটা রানটাইমে ডাইনামিকভাবে সেট করা হয়, এবং এটি চিত্র ১-এ দেখানো ছবির মতো দেখতে হয়।
কালেকশন ভিউ সহ উইজেটগুলির প্রিভিউ উইজেট পিকার-এ সঠিকভাবে প্রদর্শন করার জন্য, আমরা শুধুমাত্র প্রিভিউ-এর জন্য একটি পৃথক লেআউট ফাইল রাখার পরামর্শ দিই। এই পৃথক লেআউট ফাইলটিতে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত থাকা উচিত:
- উইজেটের প্রকৃত বিন্যাস।
- নকল আইটেমসহ একটি প্লেসহোল্ডার কালেকশন ভিউ। উদাহরণস্বরূপ, আপনি কয়েকটি নকল লিস্ট আইটেমসহ একটি প্লেসহোল্ডার
LinearLayoutপ্রদান করে একটিListViewঅনুকরণ করতে পারেন।
ListView এর একটি উদাহরণ দেখানোর জন্য, একটি আলাদা লেআউট ফাইল দিয়ে শুরু করুন:
// res/layout/widget_preview.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/widget_background"
android:orientation="vertical">
// Include the actual widget layout that contains ListView.
<include
layout="@layout/widget_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
// The number of fake items you include depends on the values you provide
// for minHeight or targetCellHeight in the AppWidgetProviderInfo
// definition.
<TextView android:text="@string/fake_item1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="?attr/appWidgetInternalPadding" />
<TextView android:text="@string/fake_item2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="?attr/appWidgetInternalPadding" />
</LinearLayout>
AppWidgetProviderInfo মেটাডেটার previewLayout অ্যাট্রিবিউট প্রদান করার সময় প্রিভিউ লেআউট ফাইলটি নির্দিষ্ট করুন। তবে, আপনি initialLayout অ্যাট্রিবিউটের জন্য প্রকৃত উইজেট লেআউটটি নির্দিষ্ট করবেন এবং রানটাইমে RemoteViews তৈরি করার সময় সেই প্রকৃত উইজেট লেআউটটিই ব্যবহার করবেন।
<appwidget-provider
previewLayout="@layout/widget_preview"
initialLayout="@layout/widget_view" />
জটিল তালিকার আইটেম
পূর্ববর্তী বিভাগের উদাহরণটিতে নকল তালিকা আইটেম দেওয়া হয়েছে, কারণ তালিকা আইটেমগুলো TextView অবজেক্ট। আইটেমগুলো জটিল লেআউটের হলে নকল আইটেম দেওয়া আরও জটিল হতে পারে।
এমন একটি তালিকা আইটেমের কথা ভাবুন যা widget_list_item.xml এ সংজ্ঞায়িত এবং দুটি TextView অবজেক্ট নিয়ে গঠিত:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView android:id="@id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/fake_title" />
<TextView android:id="@id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/fake_content" />
</LinearLayout>
নকল তালিকা আইটেম যোগ করতে, আপনি লেআউটটি একাধিকবার অন্তর্ভুক্ত করতে পারেন, কিন্তু এর ফলে প্রতিটি তালিকা আইটেম অভিন্ন হয়ে যায়। স্বতন্ত্র তালিকা আইটেম যোগ করতে, এই ধাপগুলো অনুসরণ করুন:
টেক্সট ভ্যালুগুলোর জন্য এক সেট অ্যাট্রিবিউট তৈরি করুন:
<resources> <attr name="widgetTitle" format="string" /> <attr name="widgetContent" format="string" /> </resources>টেক্সট সেট করতে এই অ্যাট্রিবিউটগুলো ব্যবহার করুন:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content"> <TextView android:id="@id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="?widgetTitle" /> <TextView android:id="@id/content" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="?widgetContent" /> </LinearLayout>প্রিভিউয়ের জন্য যতগুলো স্টাইল প্রয়োজন, ততগুলো তৈরি করুন। প্রতিটি স্টাইলে মানগুলো পুনরায় সংজ্ঞায়িত করুন:
<resources> <style name="Theme.Widget.ListItem"> <item name="widgetTitle"></item> <item name="widgetContent"></item> </style> <style name="Theme.Widget.ListItem.Preview1"> <item name="widgetTitle">Fake Title 1</item> <item name="widgetContent">Fake content 1</item> </style> <style name="Theme.Widget.ListItem.Preview2"> <item name="widgetTitle">Fake title 2</item> <item name="widgetContent">Fake content 2</item> </style> </resources>প্রিভিউ লেআউটে নকল আইটেমগুলোতে স্টাইলগুলো প্রয়োগ করুন:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" ...> <include layout="@layout/widget_view" ... /> <include layout="@layout/widget_list_item" android:theme="@style/Theme.Widget.ListItem.Preview1" /> <include layout="@layout/widget_list_item" android:theme="@style/Theme.Widget.ListItem.Preview2" /> </LinearLayout>