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

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

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

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

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

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

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

প্রিভিউ দেখানোর জন্য সিস্টেম থেকে কোনও কলব্যাক নেই, তাই আপনার অ্যাপকে সিদ্ধান্ত নিতে হবে কখন 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)
)

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

Android ১২ থেকে, উইজেট পিকারে দেখানো উইজেট প্রিভিউ স্কেল করা যায়। আপনি এটি XML লেআউট হিসেবে প্রদান করেন যা উইজেটের ডিফল্ট সাইজে সেট করা থাকে। আগে, উইজেট প্রিভিউ ছিল একটি স্ট্যাটিক ড্রয়েবল রিসোর্স, কিছু ক্ষেত্রে প্রিভিউতে ভুলভাবে দেখানো হত যে হোম স্ক্রিনে যোগ করার পরে উইজেটগুলি কেমন দেখায়।

স্কেল করা যায় এমন উইজেট প্রিভিউ প্রয়োগ করতে, এর পরিবর্তে XML লেআউট প্রদান করতে appwidget-provider এলিমেন্টের previewLayout অ্যাট্রিবিউট ব্যবহার করুন:

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

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

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

ব্যাকওয়ার্ড কম্প্যাটিবিলিটির জন্য স্ট্যাটিক উইজেট প্রিভিউ যোগ করা

Android ১১ (API লেভেল ৩০) বা তার আগের ভার্সনে উইজেট পিকারকে আপনার উইজেটের প্রিভিউ দেখাতে দিতে, অথবা স্কেল করা যায় এমন প্রিভিউয়ের ফলব্যাক হিসেবে, 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>

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

  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>