আপনার উইজেট উন্নত করুন

এই পৃষ্ঠাটিতে ঐচ্ছিক উইজেট বর্ধিতকরণের বিশদ অন্তর্ভুক্ত রয়েছে যা Android 12 (API স্তর 31) থেকে শুরু করে উপলব্ধ। এই বৈশিষ্ট্যগুলি ঐচ্ছিক, কিন্তু এগুলি আপনার ব্যবহারকারীদের উইজেট অভিজ্ঞতা বাস্তবায়ন এবং উন্নত করতে সহজ।

গতিশীল রং ব্যবহার করুন

অ্যান্ড্রয়েড 12 থেকে শুরু করে, একটি উইজেট বোতাম, ব্যাকগ্রাউন্ড এবং অন্যান্য উপাদানগুলির জন্য ডিভাইসের থিমের রং ব্যবহার করতে পারে। এটি বিভিন্ন উইজেট জুড়ে মসৃণ রূপান্তর এবং ধারাবাহিকতা প্রদান করে।

গতিশীল রং অর্জন করার দুটি উপায় আছে:

রুট লেআউটে থিম সেট হয়ে গেলে, আপনি রুট বা এর যেকোনো বাচ্চাদের মধ্যে সাধারণ রঙের বৈশিষ্ট্য ব্যবহার করতে পারেন ডায়নামিক রঙগুলি বেছে নিতে।

আপনি ব্যবহার করতে পারেন এমন রঙের বৈশিষ্ট্যগুলির কিছু উদাহরণ নিম্নরূপ:

  • ?attr/primary
  • ?attr/primaryContainer
  • ?attr/onPrimary
  • ?attr/onPrimaryContainer

নিম্নলিখিত উদাহরণে উপাদান 3 থিম ব্যবহার করে, ডিভাইসের থিমের রঙ হল "বেগুনি।" অ্যাকসেন্ট রঙ এবং উইজেট ব্যাকগ্রাউন্ড হালকা এবং গাঢ় মোডের জন্য খাপ খায়, যেমনটি চিত্র 1 এবং 2 এ দেখানো হয়েছে।

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:app="http://schemas.android.com/apk/res-auto"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:background="?attr/colorPrimaryContainer"
  android:theme="@style/Theme.Material3.DynamicColors.DayNight">

  <ImageView
    ...
    app:tint="?attr/colorPrimaryContainer"
    android:src="@drawable/ic_partly_cloudy" />

    <!-- Other widget content. -->

</LinearLayout>
লাইট মোড থিমে উইজেট
চিত্র 1. হালকা থিমে উইজেট।
ডার্ক মোড থিমে উইজেট
চিত্র 2. অন্ধকার থিমে উইজেট।

গতিশীল রঙের জন্য পশ্চাদগামী সামঞ্জস্য

ডায়নামিক রঙগুলি শুধুমাত্র Android 12 বা উচ্চতর সংস্করণে চলমান ডিভাইসগুলিতে উপলব্ধ। নিম্ন সংস্করণের জন্য একটি কাস্টম থিম প্রদান করতে, ডিফল্ট থিম বৈশিষ্ট্যগুলি ব্যবহার করে আপনার কাস্টম রঙ এবং একটি নতুন কোয়ালিফায়ার ( values-v31 ) সহ একটি ডিফল্ট থিম তৈরি করুন৷

এখানে উপাদান 3 থিম ব্যবহার করে একটি উদাহরণ:

/values/styles.xml

<resources>
  <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight">
    <!-- Override default colorBackground attribute with custom color. -->
    <item name="android:colorBackground">@color/my_background_color</item>

    <!-- Add other colors/attributes. -->

  </style>
</resources>

/values-v31/styles.xml

<resources>
  <!-- Do not override any color attribute. -->
  <style name="MyWidgetTheme" parent="Theme.Material3.DynamicColors.DayNight" />
</resources>

/layout/my_widget_layout.xml

<resources>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    ...
    android:background="?android:attr/colorBackground"
    android:theme="@style/MyWidgetTheme" />
</resources>

ভয়েস সমর্থন সক্ষম করুন

অ্যাপ অ্যাকশনগুলি প্রাসঙ্গিক ব্যবহারকারীর ভয়েস কমান্ডের প্রতিক্রিয়া হিসাবে Google সহকারীকে উইজেটগুলি প্রদর্শন করতে দেয়। বিল্ট-ইন ইন্টেন্টে (BIIs) সাড়া দেওয়ার জন্য আপনার উইজেট কনফিগার করার মাধ্যমে, আপনার অ্যাপ অ্যাসিস্ট্যান্ট সারফেস যেমন অ্যান্ড্রয়েড এবং অ্যান্ড্রয়েড অটোতে সক্রিয়ভাবে উইজেটগুলি প্রদর্শন করতে পারে। ব্যবহারকারীদের কাছে তাদের লঞ্চারে সহকারী দ্বারা প্রদর্শিত উইজেটগুলি পিন করার বিকল্প রয়েছে, যা ভবিষ্যতের ব্যস্ততাকে উত্সাহিত করে৷

উদাহরণস্বরূপ, আপনি GET_EXERCISE_OBSERVATION BII ট্রিগার করে এমন ব্যবহারকারীর ভয়েস কমান্ডগুলি পূরণ করতে আপনার ব্যায়াম অ্যাপের জন্য ওয়ার্কআউট সারাংশ উইজেট কনফিগার করতে পারেন। সহকারী সক্রিয়ভাবে আপনার উইজেট প্রদর্শন করে যখন ব্যবহারকারীরা অনুরোধ করে এই BII ট্রিগার করে, "Hey Google, ExampleApp এ এই সপ্তাহে আমি কত মাইল দৌড়েছি?"

ব্যবহারকারীর ইন্টারঅ্যাকশনের বিভিন্ন বিভাগকে কভার করে ডজন ডজন BII রয়েছে, যা প্রায় যেকোনো অ্যান্ড্রয়েড অ্যাপকে ভয়েসের জন্য তাদের উইজেট উন্নত করতে দেয়। শুরু করতে, অ্যান্ড্রয়েড উইজেটের সাথে অ্যাপ অ্যাকশন একীভূত করুন দেখুন।

আপনার অ্যাপের উইজেট পিকার অভিজ্ঞতা উন্নত করুন

Android 12 আপনাকে স্কেল করা উইজেট প্রিভিউ এবং উইজেট বিবরণ যোগ করতে দেয়। Android 15 আপনাকে জেনারেট করা উইজেট পূর্বরূপ সহ আপনার অ্যাপের জন্য উইজেট পিকার অভিজ্ঞতা উন্নত করতে দেয়।

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

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

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

অ্যাপগুলি আপ-টু-ডেট এবং ব্যক্তিগতকৃত তথ্য সহ তাদের উইজেটগুলির উপস্থিতি আপডেট করতে AppWidgetManager , setWidgetPreview , এবং getWidgetPreview পদ্ধতিগুলি ব্যবহার করতে পারে৷

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

Glance.compose একটি কম্পোজিশন চালায়, তাই আপনার কম্পোজেবলের বডিতে কোনো সাসপেন্ড ফাংশন, ফ্লো বা অনুরূপ অ্যাসিঙ্ক কল ব্যবহার করা হয় না। পরিবর্তে, আপনাকে অবশ্যই ধ্রুবক ডেটা ব্যবহার করতে হবে।

নিম্নলিখিত উদাহরণ একটি আপডেট প্রিভিউ তৈরি করতে Jetpack Glance ব্যবহার করে। এই স্নিপেটে একটি পদ্ধতি হিসাবে দেখানোর জন্য setWidgetPreview এর জন্য 35 বা তার পরে একটি compileSdk বিল্ড সেটিং প্রয়োজন৷

AppWidgetManager.getInstance(appContext).setWidgetPreview(
    ComponentName(
        appContext,
        ExampleAppWidgetReceiver::class.java
    ),
    AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
    ExampleAppWidget().compose(
        context = appContext
    ),
)

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

আপনি এক নজর ছাড়াই 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 অ্যাট্রিবিউটের চেয়ে প্রাধান্য পায়।

সঠিক পূর্বরূপ নির্মাণের জন্য প্রস্তাবিত পদ্ধতি

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

<appwidget-provider
    ...
    android:previewLayout="@layout/my_widget_preview">
</appwidget-provider>
একটি উইজেট পূর্বরূপ দেখানো একটি চিত্র৷
চিত্র 3. একটি উইজেট প্রিভিউ যা ডিফল্টভাবে একটি 3x3 এলাকায় প্রদর্শিত হয় কিন্তু এটির XML বিন্যাসের কারণে একটি 3x1 এলাকায় ফিট হতে পারে।

একটি সঠিক পূর্বরূপ প্রদর্শন করতে, আপনি নিম্নলিখিত ধাপগুলি সম্পূর্ণ করে ডিফল্ট মান সহ প্রকৃত উইজেট বিন্যাস সরাসরি প্রদান করতে পারেন:

  • TextView উপাদানের জন্য android:text="@string/my_widget_item_fake_1" সেট করা হচ্ছে।

  • ImageView উপাদানগুলির জন্য একটি ডিফল্ট বা স্থানধারক চিত্র বা আইকন সেট করা, যেমন android:src="@drawable/my_widget_icon"

ডিফল্ট মান ছাড়া, প্রিভিউ ভুল বা খালি মান দেখাতে পারে। এই পদ্ধতির একটি গুরুত্বপূর্ণ সুবিধা হল আপনি স্থানীয় পূর্বরূপ সামগ্রী প্রদান করতে পারেন।

ListView , GridView , বা StackView ধারণ করা আরও জটিল প্রিভিউগুলির জন্য প্রস্তাবিত পদ্ধতির জন্য, বিশদ বিবরণের জন্য ডায়নামিক আইটেমগুলি অন্তর্ভুক্ত করে নির্ভুল পূর্বরূপ তৈরি করুন দেখুন।

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

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

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

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

উইজেটগুলির একটি অনন্য নাম থাকা প্রয়োজন যখন সেগুলি উইজেট পিকারে প্রদর্শিত হয়।

AndroidManifest.xml ফাইলে উইজেটের receiver এলিমেন্টের label অ্যাট্রিবিউট থেকে উইজেটের নাম লোড করা হয়।

<receiver
    ….
   android:label="Memories">
     ….
</receiver>

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

অ্যান্ড্রয়েড 12 থেকে শুরু করে, আপনার উইজেটের জন্য প্রদর্শন করার জন্য উইজেট পিকারের জন্য একটি বিবরণ প্রদান করুন।

একটি উইজেট বাছাইকারীকে দেখানো একটি চিত্র একটি উইজেট এবং তার বিবরণ দেখাচ্ছে৷
চিত্র 4. নমুনা উইজেট বাছাইকারী একটি উইজেট এবং তার বিবরণ দেখাচ্ছে।

&lt;appwidget-provider&gt; এর description বৈশিষ্ট্য ব্যবহার করে আপনার উইজেটের জন্য একটি বিবরণ প্রদান করুন। উপাদান:

<appwidget-provider
    android:description="@string/my_widget_description">
</appwidget-provider>

আপনি Android এর পূর্ববর্তী সংস্করণগুলিতে descriptionRes বৈশিষ্ট্যটি ব্যবহার করতে পারেন, তবে উইজেট পিকার দ্বারা এটি উপেক্ষা করা হয়।

মসৃণ রূপান্তর সক্ষম করুন

অ্যান্ড্রয়েড 12 থেকে শুরু করে, লঞ্চারগুলি একটি মসৃণ রূপান্তর প্রদান করে যখন কোনও ব্যবহারকারী একটি উইজেট থেকে আপনার অ্যাপ চালু করে।

এই উন্নত রূপান্তরটি সক্ষম করতে, আপনার পটভূমি উপাদান সনাক্ত করতে @android:id/background বা android.R.id.background ব্যবহার করুন:

// Top-level layout of the widget.
<LinearLayout
    android:id="@android:id/background">
</LinearLayout>

আপনার অ্যাপটি ব্রেক না করে Android এর পূর্ববর্তী সংস্করণগুলিতে @android:id/background ব্যবহার করতে পারে, কিন্তু এটি উপেক্ষা করা হয়।

RemoteViews এর রানটাইম পরিবর্তন ব্যবহার করুন

অ্যান্ড্রয়েড 12 থেকে শুরু করে, আপনি বেশ কয়েকটি RemoteViews পদ্ধতির সুবিধা নিতে পারেন যা RemoteViews বৈশিষ্ট্যগুলির রানটাইম পরিবর্তনের জন্য প্রদান করে। যোগ করা পদ্ধতির সম্পূর্ণ তালিকার জন্য RemoteViews API রেফারেন্স দেখুন।

নিম্নলিখিত কোড উদাহরণ দেখায় কিভাবে এই পদ্ধতির কয়েকটি ব্যবহার করতে হয়।

কোটলিন

// Set the colors of a progress bar at runtime.
remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList())

// Specify exact sizes for margins.
remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP)

জাভা

// Set the colors of a progress bar at runtime.
remoteView.setColorStateList(R.id.progress, "setProgressTintList", createProgressColorStateList());

// Specify exact sizes for margins.
remoteView.setViewLayoutMargin(R.id.text, RemoteViews.MARGIN_END, 8f, TypedValue.COMPLEX_UNIT_DP);