আপনার উইজেট পিকারে জেনারেট করা প্রিভিউ যোগ করুন

জেনারেটেড উইজেট প্রিভিউ আপনাকে আপনার উইজেটগুলির জন্য গতিশীল, ব্যক্তিগতকৃত পূর্বরূপ তৈরি করার অনুমতি দেয় যা সঠিকভাবে প্রতিফলিত করে যে তারা কীভাবে ব্যবহারকারীর হোম স্ক্রিনে প্রদর্শিত হবে। এগুলি একটি পুশ API এর মাধ্যমে সরবরাহ করা হয়, যার অর্থ আপনার অ্যাপটি তার জীবনচক্র চলাকালীন যে কোনও সময়ে উইজেট হোস্টের কাছ থেকে কোনও স্পষ্ট অনুরোধ না পেয়ে পূর্বরূপ সরবরাহ করে৷

আপনার অ্যাপের উইজেট পিকার অভিজ্ঞতা উন্নত করতে, Android 15 এবং পরবর্তী ডিভাইসগুলিতে একটি জেনারেটেড উইজেট পূর্বরূপ প্রদান করুন, Android 12 থেকে Android 14 ডিভাইসগুলির জন্য একটি স্কেল করা উইজেট পূর্বরূপ (একটি previewLayout নির্দিষ্ট করে) এবং পূর্ববর্তী সংস্করণগুলির জন্য একটি previewImage

আরও তথ্যের জন্য, YouTube-এ লাইভ আপডেট এবং উইজেট দিয়ে আপনার অ্যাপকে সমৃদ্ধ করুন দেখুন।

জেনারেটেড উইজেট পূর্বরূপের জন্য আপনার অ্যাপ সেট আপ করুন

অ্যান্ড্রয়েড 15 বা তার পরবর্তী ডিভাইসে জেনারেটেড উইজেট প্রিভিউ দেখাতে, উইজেট পিকারে RemoteViews প্রদান করার ক্ষমতা থাকতে প্রথমে compileSdk মান 35 বা পরবর্তী মডিউল build.gradle ফাইলে সেট করুন।

অ্যাপগুলি তারপর GlanceAppWidgetManager বা AppWidgetManagersetWidgetPreview ব্যবহার করতে পারে। অপব্যবহার রোধ করতে এবং সিস্টেমের স্বাস্থ্য উদ্বেগ কমাতে, setWidgetPreview হল একটি রেট-সীমিত API। ডিফল্ট সীমা প্রতি ঘন্টায় প্রায় দুটি কল।

জেটপ্যাক গ্ল্যান্সের সাথে আপডেট প্রিভিউ তৈরি করুন

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

  1. পূর্বরূপের জন্য রচনাযোগ্য সামগ্রী প্রদান করতে GlanceAppWidget.providePreview ফাংশন ওভাররাইড করুন। প্রিভিউটি সঠিক ডেটা দেখায় তা নিশ্চিত করতে আপনি যেমন provideGlance চান, আপনার অ্যাপের ডেটা লোড করুন এবং উইজেটের কম্পোজযোগ্য বিষয়বস্তুতে পাস করুন। provideGlance বিপরীতে, এটি একটি একক রচনা যার কোনো পুনর্গঠন বা প্রভাব নেই৷

  2. প্রিভিউ তৈরি ও প্রকাশ করতে GlanceAppWidgetManager.setWidgetPreviews কল করুন।

প্রিভিউ প্রদান করার জন্য সিস্টেম থেকে কোনো কলব্যাক নেই, তাই আপনার অ্যাপকে সিদ্ধান্ত নিতে হবে কখন setWidgetPreviews কল করতে হবে। আপডেট কৌশল আপনার উইজেটের ব্যবহারের ক্ষেত্রে নির্ভর করে:

  • যদি উইজেটে স্ট্যাটিক তথ্য থাকে বা এটি একটি দ্রুত পদক্ষেপ হয়, অ্যাপটি প্রথম চালু হলে পূর্বরূপ সেট করুন।
  • একবার আপনার অ্যাপে ডেটা থাকলে আপনি পূর্বরূপ সেট করতে পারেন; উদাহরণস্বরূপ, ব্যবহারকারীর সাইন-ইন বা প্রাথমিক সেটআপের পরে।
  • আপনি একটি নির্বাচিত ক্যাডেন্সে পূর্বরূপ আপডেট করার জন্য একটি পর্যায়ক্রমিক কাজ সেট আপ করতে পারেন।

জেনারেটেড প্রিভিউ ট্রাবলশুটিং

একটি সাধারণ সমস্যা হল যে আপনি একটি প্রিভিউ জেনারেট করার পরে, উইজেটের ড্রপ সাইজের সাথে সম্পর্কিত প্রিভিউ ইমেজ থেকে ছবি, আইকন বা অন্যান্য কম্পোজেবল অনুপস্থিত হতে পারে। এই ড্রপের আকারটি নির্দিষ্ট করা থাকলে targetCellWidth এবং targetCellHeight দ্বারা বা অ্যাপ উইজেট প্রদানকারীর তথ্য ফাইলে minWidth এবং minHeight দ্বারা সংজ্ঞায়িত করা হয়।

এটি ঘটে কারণ অ্যান্ড্রয়েড, ডিফল্টরূপে, উইজেটের ন্যূনতম আকারে দৃশ্যমান শুধুমাত্র কম্পোজেবল রেন্ডার করে। অন্য কথায়, Android previewSizeMode কে SizeMode.Single এ ডিফল্টভাবে সেট করে। কোন কম্পোজেবল আঁকতে হবে তা নির্ধারণ করতে এটি অ্যাপ উইজেট প্রদানকারীর তথ্য XML-android:minHeight এবং android:minWidth ব্যবহার করে।

এটি ঠিক করতে, আপনার GlanceAppWidgetpreviewSizeMode ওভাররাইড করুন এবং এটিকে SizeMode.Responsive এ সেট করুন, DpSize মানগুলির একটি সেট প্রদান করে৷ এটি পূর্বরূপের জন্য রেন্ডার করার জন্য প্রয়োজনীয় সমস্ত লেআউট আকার Android কে বলে, যা সমস্ত উপাদান সঠিকভাবে প্রদর্শন নিশ্চিত করে৷

নির্দিষ্ট ফর্ম ফ্যাক্টর জন্য অপ্টিমাইজ করুন. ন্যূনতম থেকে শুরু করে এবং আপনার উইজেটের ব্রেকপয়েন্ট অনুসরণ করে 1 বা 2টি আকার সরবরাহ করুন। পশ্চাদগামী সামঞ্জস্যের জন্য কমপক্ষে একটি চিত্র নির্দিষ্ট করুন৷ আপনি উইজেট ডিজাইন নির্দেশিকাতে বিভিন্ন গ্রিড আকারের জন্য উপযুক্ত ন্যূনতম ডিপি মান খুঁজে পেতে পারেন।

জেটপ্যাক গ্ল্যান্স ছাড়াই আপডেট করা প্রিভিউ তৈরি করুন

আপনি এক নজর ছাড়াই 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)
)

উইজেট পিকারে স্কেলেবল উইজেট প্রিভিউ যোগ করুন

অ্যান্ড্রয়েড 12 থেকে শুরু করে, উইজেট পিকারে প্রদর্শিত উইজেট প্রিভিউ স্কেলযোগ্য। আপনি এটি উইজেটের ডিফল্ট আকারে সেট করা একটি XML বিন্যাস হিসাবে প্রদান করেন। পূর্বে, উইজেট প্রিভিউ ছিল একটি স্ট্যাটিক অঙ্কনযোগ্য রিসোর্স, কিছু কিছু ক্ষেত্রে প্রিভিউগুলিকে ভুলভাবে প্রতিফলিত করে যে উইজেটগুলি হোম স্ক্রিনে যুক্ত হলে কীভাবে প্রদর্শিত হয়।

স্কেলযোগ্য উইজেট পূর্বরূপ বাস্তবায়ন করতে, পরিবর্তে একটি XML বিন্যাস প্রদান করতে appwidget-provider উপাদানের previewLayout বৈশিষ্ট্য ব্যবহার করুন:

<appwidget-provider
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>

আমরা বাস্তবসম্মত ডিফল্ট বা পরীক্ষার মান সহ প্রকৃত উইজেটের মতো একই লেআউট ব্যবহার করার পরামর্শ দিই। বেশিরভাগ অ্যাপ একই previewLayout এবং initialLayout ব্যবহার করে। সঠিক প্রিভিউ লেআউট তৈরির বিষয়ে নির্দেশনার জন্য, এই পৃষ্ঠায় নিম্নলিখিত বিভাগটি দেখুন।

আমরা previewLayout এবং previewImage বৈশিষ্ট্য উভয়ই নির্দিষ্ট করার পরামর্শ দিই, যাতে ব্যবহারকারীর ডিভাইস previewLayout সমর্থন না করলে আপনার অ্যাপটি previewImage ব্যবহার করতে পারে। previewLayout অ্যাট্রিবিউটটি previewImage অ্যাট্রিবিউটের চেয়ে প্রাধান্য পায়।

উইজেট পূর্বরূপের সাথে পশ্চাদগামী সামঞ্জস্য

অ্যান্ড্রয়েড 11 (এপিআই লেভেল 30) এ উইজেট বাছাইকারীদের বা আপনার উইজেটের নিচের প্রিভিউ দেখাতে বা জেনারেটেড প্রিভিউগুলির জন্য একটি ফলব্যাক হিসাবে, previewImage অ্যাট্রিবিউটটি নির্দিষ্ট করুন।

আপনি উইজেটের চেহারা পরিবর্তন করলে, পূর্বরূপ চিত্রটি আপডেট করুন।

ডায়নামিক আইটেমগুলি অন্তর্ভুক্ত করে সঠিক প্রিভিউ তৈরি করুন

চিত্র 1: একটি উইজেট প্রিভিউ যাতে কোনো তালিকা আইটেম নেই।

এই বিভাগটি একটি সংগ্রহ দৃশ্য সহ একটি উইজেটের জন্য একটি উইজেট প্রিভিউতে একাধিক আইটেম প্রদর্শনের জন্য প্রস্তাবিত পদ্ধতির ব্যাখ্যা করে—অর্থাৎ, একটি উইজেট যা একটি 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>

জাল তালিকা আইটেম প্রদান করতে, আপনি একাধিকবার লেআউট অন্তর্ভুক্ত করতে পারেন, কিন্তু এটি প্রতিটি তালিকা আইটেমকে অভিন্ন করে তোলে। অনন্য তালিকা আইটেম প্রদান করতে, এই পদক্ষেপগুলি অনুসরণ করুন:

  1. পাঠ্য মানগুলির জন্য বৈশিষ্ট্যগুলির একটি সেট তৈরি করুন:

    <resources>
        <attr name="widgetTitle" format="string" />
        <attr name="widgetContent" format="string" />
    </resources>
    
  2. পাঠ্য সেট করতে এই বৈশিষ্ট্যগুলি ব্যবহার করুন:

    <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>
    
  3. পূর্বরূপের জন্য প্রয়োজনীয় যতগুলি শৈলী তৈরি করুন৷ প্রতিটি শৈলীতে মান পুনরায় সংজ্ঞায়িত করুন:

    <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>
    
  4. পূর্বরূপ বিন্যাসে জাল আইটেমগুলিতে শৈলী প্রয়োগ করুন:

    <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>