জেনারেটেড উইজেট প্রিভিউ আপনাকে আপনার উইজেটগুলির জন্য গতিশীল, ব্যক্তিগতকৃত প্রিভিউ তৈরি করতে দেয় যা ব্যবহারকারীর হোম স্ক্রিনে কীভাবে প্রদর্শিত হবে তা সঠিকভাবে প্রতিফলিত করে। এগুলি একটি পুশ এপিআই এর মাধ্যমে সরবরাহ করা হয়, যার অর্থ আপনার অ্যাপটি উইজেট হোস্টের কাছ থেকে কোনও স্পষ্ট অনুরোধ না পেয়ে তার জীবনচক্রের যেকোনো সময়ে প্রিভিউ প্রদান করে।
আপনার অ্যাপের উইজেট পিকার অভিজ্ঞতা উন্নত করতে, Android 15 এবং পরবর্তী ডিভাইসগুলিতে একটি জেনারেট করা উইজেট প্রিভিউ, Android 12 থেকে Android 14 ডিভাইসের জন্য একটি স্কেল করা উইজেট প্রিভিউ (একটি previewLayout নির্দিষ্ট করে) এবং পূর্ববর্তী সংস্করণগুলির জন্য একটি previewImage প্রদান করুন।
আরও তথ্যের জন্য, YouTube-এ লাইভ আপডেট এবং উইজেট দিয়ে আপনার অ্যাপকে সমৃদ্ধ করুন দেখুন।
জেনারেট করা উইজেট প্রিভিউয়ের জন্য আপনার অ্যাপ সেট আপ করুন
অ্যান্ড্রয়েড ১৫ বা তার পরবর্তী ডিভাইসে জেনারেটেড উইজেট প্রিভিউ দেখানোর জন্য, প্রথমে মডিউল build.gradle ফাইলে compileSdk মান ৩৫ বা তার পরবর্তী সেট করুন যাতে উইজেট পিকারে RemoteViews প্রদানের ক্ষমতা থাকে।
এরপর অ্যাপগুলি GlanceAppWidgetManager অথবা AppWidgetManager -এ setWidgetPreview ব্যবহার করতে পারে। অপব্যবহার রোধ করতে এবং সিস্টেমের স্বাস্থ্যগত উদ্বেগ কমাতে, setWidgetPreview হল একটি রেট-লিমিটেড API। ডিফল্ট সীমা হল প্রতি ঘন্টায় প্রায় দুটি কল।
Jetpack Glance ব্যবহার করে আপডেটেড প্রিভিউ তৈরি করুন
জেটপ্যাক গ্ল্যান্স দিয়ে তৈরি উইজেটগুলির জন্য, নিম্নলিখিতগুলি করুন:
প্রিভিউয়ের জন্য কম্পোজেবল কন্টেন্ট প্রদান করতে
GlanceAppWidget.providePreviewফাংশনটি ওভাররাইড করুন। যেমনটি আপনিprovideGlanceতে করবেন, আপনার অ্যাপের ডেটা লোড করুন এবং উইজেটের কম্পোজেবল কন্টেন্টে পাস করুন, যাতে প্রিভিউ সঠিক ডেটা দেখায়।provideGlanceবিপরীতে, এটি একটি একক কম্পোজিশন যার কোনও পুনর্গঠন বা প্রভাব নেই।প্রিভিউ তৈরি এবং প্রকাশ করতে
GlanceAppWidgetManager.setWidgetPreviewsকল করুন।
প্রিভিউ প্রদানের জন্য সিস্টেম থেকে কোনও কলব্যাক নেই, তাই আপনার অ্যাপকে কখন setWidgetPreviews কল করতে হবে তা নির্ধারণ করতে হবে। আপডেট কৌশল আপনার উইজেটের ব্যবহারের ক্ষেত্রে নির্ভর করে:
- যদি উইজেটে স্ট্যাটিক তথ্য থাকে অথবা এটি একটি দ্রুত পদক্ষেপ, তাহলে অ্যাপটি প্রথম চালু হওয়ার সময় প্রিভিউ সেট করুন।
- আপনার অ্যাপে ডেটা আসার পর আপনি প্রিভিউ সেট করতে পারেন; উদাহরণস্বরূপ, ব্যবহারকারীর সাইন-ইন বা প্রাথমিক সেটআপের পরে।
- আপনি একটি নির্বাচিত ক্যাডেন্সে প্রিভিউ আপডেট করার জন্য একটি পর্যায়ক্রমিক টাস্ক সেট আপ করতে পারেন।
জেনারেটেড প্রিভিউগুলির সমস্যা সমাধান
একটি সাধারণ সমস্যা হল, প্রিভিউ তৈরি করার পরে, উইজেটের ড্রপ সাইজের তুলনায় প্রিভিউ ইমেজ থেকে ছবি, আইকন বা অন্যান্য কম্পোজেবল অনুপস্থিত থাকতে পারে। এই ড্রপ সাইজটি targetCellWidth এবং targetCellHeight দ্বারা নির্ধারিত হয়, যদি নির্দিষ্ট করা থাকে, অথবা অ্যাপ উইজেট প্রোভাইডার ইনফো ফাইলে minWidth এবং minHeight দ্বারা নির্ধারিত হয়।
এটি ঘটে কারণ অ্যান্ড্রয়েড, ডিফল্টভাবে, শুধুমাত্র উইজেটের সর্বনিম্ন আকারে দৃশ্যমান কম্পোজেবলগুলিকে রেন্ডার করে। অন্য কথায়, অ্যান্ড্রয়েড ডিফল্টরূপে previewSizeMode কে SizeMode.Single এ সেট করে। এটি কোন কম্পোজেবলগুলি আঁকতে হবে তা নির্ধারণ করতে অ্যাপ উইজেট প্রোভাইডার ইনফো XML- এ android:minHeight এবং android:minWidth ব্যবহার করে।
এটি ঠিক করার জন্য, আপনার GlanceAppWidget এ previewSizeMode ওভাররাইড করুন এবং SizeMode.Responsive এ সেট করুন, যা DpSize মানের একটি সেট প্রদান করে। এটি Android কে প্রিভিউয়ের জন্য রেন্ডার করার জন্য প্রয়োজনীয় সমস্ত লেআউট আকার সম্পর্কে অবহিত করে, যা নিশ্চিত করে যে সমস্ত উপাদান সঠিকভাবে প্রদর্শিত হচ্ছে।
নির্দিষ্ট ফর্ম ফ্যাক্টরের জন্য অপ্টিমাইজ করুন। ন্যূনতম থেকে শুরু করে এবং আপনার উইজেটের ব্রেকপয়েন্ট অনুসরণ করে 1 বা 2টি আকার সরবরাহ করুন। ব্যাকওয়ার্ড সামঞ্জস্যের জন্য কমপক্ষে একটি চিত্র নির্দিষ্ট করুন। আপনি উইজেট ডিজাইন নির্দেশিকাতে বিভিন্ন গ্রিড আকারের জন্য উপযুক্ত ন্যূনতম DP মান খুঁজে পেতে পারেন।
জেটপ্যাক গ্লান্স ছাড়াই আপডেটেড প্রিভিউ তৈরি করুন
আপনি Glance ছাড়াই RemoteViews ব্যবহার করতে পারেন। নিম্নলিখিত উদাহরণটি একটি XML উইজেট লেআউট রিসোর্স লোড করে এবং এটিকে প্রিভিউ হিসেবে সেট করে। এই স্নিপেটে setWidgetPreview একটি পদ্ধতি হিসেবে দেখানোর জন্য 35 বা তার পরবর্তী সংস্করণের একটি compileSdk বিল্ড সেটিং প্রয়োজন।
AppWidgetManager.getInstance(appContext).setWidgetPreview(
ComponentName(
appContext,
ExampleAppWidgetReceiver::class.java
),
AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
RemoteViews("com.example", R.layout.widget_preview)
)
উইজেট পিকারে স্কেলেবল উইজেট প্রিভিউ যোগ করুন
অ্যান্ড্রয়েড ১২ থেকে শুরু করে, উইজেট পিকারে প্রদর্শিত উইজেট প্রিভিউ স্কেলেবল। আপনি এটি উইজেটের ডিফল্ট আকারে সেট করা একটি XML লেআউট হিসাবে প্রদান করেন। পূর্বে, উইজেট প্রিভিউ একটি স্ট্যাটিক ড্রয়েবল রিসোর্স ছিল, কিছু ক্ষেত্রে প্রিভিউতে ভুলভাবে প্রতিফলিত হত যে হোম স্ক্রিনে উইজেটগুলি যুক্ত করার সময় কীভাবে প্রদর্শিত হয়।
স্কেলেবল উইজেট প্রিভিউ বাস্তবায়নের জন্য, appwidget-provider এলিমেন্টের previewLayout অ্যাট্রিবিউট ব্যবহার করে একটি XML লেআউট প্রদান করুন:
<appwidget-provider
android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
আমরা বাস্তবসম্মত ডিফল্ট বা পরীক্ষার মান সহ প্রকৃত উইজেটের মতো একই লেআউট ব্যবহার করার পরামর্শ দিচ্ছি। বেশিরভাগ অ্যাপ একই previewLayout এবং initialLayout ব্যবহার করে। সঠিক প্রিভিউ লেআউট তৈরির নির্দেশনার জন্য, এই পৃষ্ঠার নিম্নলিখিত বিভাগটি দেখুন।
আমরা previewLayout এবং previewImage উভয় বৈশিষ্ট্যই নির্দিষ্ট করার পরামর্শ দিচ্ছি, যাতে ব্যবহারকারীর ডিভাইস previewLayout সমর্থন না করলে আপনার অ্যাপটি previewImage ব্যবহার করতে পারে। previewLayout বৈশিষ্ট্যটি previewImage বৈশিষ্ট্যের চেয়ে প্রাধান্য পায়।
উইজেট প্রিভিউয়ের সাথে পিছনের দিকে সামঞ্জস্যপূর্ণতা
অ্যান্ড্রয়েড ১১ (এপিআই লেভেল ৩০) বা তার নিচের ভার্সনে উইজেট পিকারদের আপনার উইজেটের প্রিভিউ দেখাতে দিতে, অথবা জেনারেটেড প্রিভিউয়ের জন্য ফলব্যাক হিসেবে, previewImage অ্যাট্রিবিউটটি নির্দিষ্ট করুন।
আপনি যদি উইজেটের চেহারা পরিবর্তন করেন, তাহলে প্রিভিউ ইমেজ আপডেট করুন।
গতিশীল আইটেম সহ সঠিক প্রিভিউ তৈরি করুন

এই বিভাগটি একটি সংগ্রহ দৃশ্য সহ একটি উইজেটের জন্য একটি উইজেট প্রিভিউতে একাধিক আইটেম প্রদর্শনের জন্য প্রস্তাবিত পদ্ধতি ব্যাখ্যা করে - অর্থাৎ, একটি উইজেট যা একটি ListView , GridView , অথবা StackView ব্যবহার করে। এটি জেনারেট করা উইজেট প্রিভিউগুলির ক্ষেত্রে প্রযোজ্য নয়।
যদি আপনার উইজেট এই ভিউগুলির মধ্যে একটি ব্যবহার করে, তাহলে সরাসরি প্রকৃত উইজেট লেআউট প্রদান করে একটি স্কেলেবল প্রিভিউ তৈরি করলে উইজেট প্রিভিউতে কোনও আইটেম না দেখালে অভিজ্ঞতা খারাপ হয়ে যায়। এটি ঘটে কারণ সংগ্রহ ভিউ ডেটা রানটাইমে গতিশীলভাবে সেট করা হয় এবং এটি চিত্র 1-এ দেখানো চিত্রের মতো দেখায়।
উইজেট পিকারে কালেকশন ভিউ সহ উইজেটগুলির প্রিভিউ সঠিকভাবে প্রদর্শিত করার জন্য, আমরা শুধুমাত্র প্রিভিউয়ের জন্য নির্ধারিত একটি পৃথক লেআউট ফাইল বজায় রাখার পরামর্শ দিচ্ছি। এই পৃথক লেআউট ফাইলটিতে নিম্নলিখিতগুলি অন্তর্ভুক্ত থাকা উচিত:
- প্রকৃত উইজেট লেআউট।
- জাল আইটেম সহ একটি প্লেসহোল্ডার সংগ্রহের দৃশ্য। উদাহরণস্বরূপ, আপনি একটি প্লেসহোল্ডার
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_previe"
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>