এই পৃষ্ঠাটিতে ঐচ্ছিক উইজেট বর্ধিতকরণের বিশদ অন্তর্ভুক্ত রয়েছে যা Android 12 (API স্তর 31) থেকে শুরু করে উপলব্ধ। এই বৈশিষ্ট্যগুলি ঐচ্ছিক, কিন্তু এগুলি আপনার ব্যবহারকারীদের উইজেট অভিজ্ঞতা বাস্তবায়ন এবং উন্নত করতে সহজ।
গতিশীল রং ব্যবহার করুন
অ্যান্ড্রয়েড 12 থেকে শুরু করে, একটি উইজেট বোতাম, ব্যাকগ্রাউন্ড এবং অন্যান্য উপাদানগুলির জন্য ডিভাইসের থিমের রং ব্যবহার করতে পারে। এটি বিভিন্ন উইজেট জুড়ে মসৃণ রূপান্তর এবং ধারাবাহিকতা প্রদান করে।
গতিশীল রং অর্জন করার দুটি উপায় আছে:
রুট লেআউটে সিস্টেমের ডিফল্ট থিম (
@android:style/Theme.DeviceDefault.DayNight
) ব্যবহার করুন।অ্যান্ড্রয়েড লাইব্রেরির জন্য উপাদান উপাদান থেকে উপাদান 3 থিম (
Theme.Material3.DynamicColors.DayNight
) ব্যবহার করুন, Android v1.6.0 এর জন্য উপাদান উপাদান থেকে শুরু করে উপলব্ধ।
রুট লেআউটে থিম সেট হয়ে গেলে, আপনি রুট বা এর যেকোনো বাচ্চাদের মধ্যে সাধারণ রঙের বৈশিষ্ট্য ব্যবহার করতে পারেন ডায়নামিক রঙগুলি বেছে নিতে।
আপনি ব্যবহার করতে পারেন এমন রঙের বৈশিষ্ট্যগুলির কিছু উদাহরণ নিম্নরূপ:
-
?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>
গতিশীল রঙের জন্য পশ্চাদগামী সামঞ্জস্য
ডায়নামিক রঙগুলি শুধুমাত্র 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>
একটি সঠিক পূর্বরূপ প্রদর্শন করতে, আপনি নিম্নলিখিত ধাপগুলি সম্পূর্ণ করে ডিফল্ট মান সহ প্রকৃত উইজেট বিন্যাস সরাসরি প্রদান করতে পারেন:
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 থেকে শুরু করে, আপনার উইজেটের জন্য প্রদর্শন করার জন্য উইজেট পিকারের জন্য একটি বিবরণ প্রদান করুন।
<appwidget-provider>
এর 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);