এই পৃষ্ঠায় Android ১২ (API লেভেল ৩১)-এ নিয়ে আসা উইজেটের সাইজ রিফাইন করা ও আরও বেশি ফ্লেক্সিবিলিটি সম্পর্কে বর্ণনা করা হয়েছে। এছাড়াও, কীভাবে আপনার উইজেটের সাইজ নির্ধারণ করবেন সেই বিষয়ে বিস্তারিত তথ্য দেওয়া আছে।
উইজেটের সাইজ ও লেআউটের জন্য উন্নত API ব্যবহার করুন
Android 12 (API লেভেল 31) থেকে শুরু করে, আপনি নিম্নলিখিত কাজগুলি করে আরও পরিমার্জিত সাইজ অ্যাট্রিবিউট এবং নমনীয় লেআউট প্রদান করতে পারেন, যেমনটি নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে:
রেসপন্সিভ লেআউট বা নির্দিষ্ট লেআউট প্রদান করা।
Android-এর আগের ভার্সনে,
OPTION_APPWIDGET_MIN_WIDTH,
OPTION_APPWIDGET_MIN_HEIGHT,
OPTION_APPWIDGET_MAX_WIDTH এবং
OPTION_APPWIDGET_MAX_HEIGHT
এক্সট্রা ব্যবহার করে উইজেটের সাইজের রেঞ্জ পাওয়া এবং তারপর উইজেটের সাইজ অনুমান করা সম্ভব, কিন্তু সেই লজিক সব পরিস্থিতিতে কাজ করে না। Android ১২ বা তার পরবর্তী ভার্সনকে টার্গেট করা উইজেটের জন্য,
আমরা রেসপন্সিভ বা সঠিক লেআউট প্রদান করার সাজেশন দিই।
অতিরিক্ত উইজেটের সাইজ সংক্রান্ত সীমাবদ্ধতা নির্দিষ্ট করুন
Android 12-এ API যোগ করা হয়েছে যা আপনাকে বিভিন্ন স্ক্রিন সাইজের ডিভাইসে উইজেটের সাইজ আরও নির্ভরযোগ্যভাবে নিশ্চিত করতে সাহায্য করে।
আগে থেকে থাকা minWidth,
minHeight,
minResizeWidth
এবং minResizeHeight
অ্যাট্রিবিউট ছাড়াও, নিম্নলিখিত নতুন appwidget-provider অ্যাট্রিবিউট ব্যবহার করুন:
targetCellWidthএবংtargetCellHeight: লঞ্চার গ্রিড সেলের নিরিখে উইজেটের টার্গেট সাইজ নির্ধারণ করে। যদি উল্লেখ করা থাকে, তাহলেminWidthবাminHeight-এর পরিবর্তে এই অ্যাট্রিবিউট ব্যবহার করা হয়।maxResizeWidthএবংmaxResizeHeight: লঞ্চার ব্যবহারকারীকে উইজেটের সাইজ যতটা ছোট বড় করার অনুমতি দেয় তার সর্বাধিক সাইজ নির্ধারণ করে।
নিচে দেওয়া XML থেকে বোঝা যাবে যে সাইজ সংক্রান্ত অ্যাট্রিবিউট কীভাবে ব্যবহার করতে হয়।
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:targetCellWidth="3" android:targetCellHeight="2" android:maxResizeWidth="250dp" android:maxResizeHeight="110dp"> </appwidget-provider>
রেসপন্সিভ লেআউট প্রদান করুন
উইজেটের সাইজের উপর নির্ভর করে লেআউট পরিবর্তন করার প্রয়োজন হলে, আমরা সাজেস্ট করি যে লেআউটের একটি ছোট সেট তৈরি করুন, যার প্রতিটি সাইজের একটি রেঞ্জের জন্য প্রযোজ্য। এটি সম্ভব না হলে, অন্য বিকল্প হল এই পৃষ্ঠায় যেমন বর্ণনা করা হয়েছে, সেই অনুযায়ী রানটাইমে সঠিক উইজেট সাইজের ভিত্তিতে লেআউট প্রদান করা।
এই ফিচারটি আরও মসৃণ স্কেলিং এবং সামগ্রিকভাবে আরও ভাল সিস্টেমের স্বাস্থ্য প্রদান করে, কারণ সিস্টেমকে প্রতিবার অ্যাপটি জাগিয়ে তুলতে হয় না এটি একটি ভিন্ন আকারে উইজেট প্রদর্শন করে।
লেআউটের তালিকা কীভাবে প্রদান করতে হয় তা নিম্নলিখিত কোডের উদাহরণ থেকে জানতে পারবেন।
override fun onUpdate( /* ... */ ) { val smallView = RemoteViews( /* ... */ ) val tallView = RemoteViews( /* ... */ ) val wideView = RemoteViews( /* ... */ ) val viewMapping: Map<SizeF, RemoteViews> = mapOf( SizeF(150f, 100f) to smallView, SizeF(150f, 200f) to tallView, SizeF(215f, 100f) to wideView ) val remoteViews = RemoteViews(viewMapping) appWidgetManager.updateAppWidget(id, remoteViews) }
ধরে নিন যে উইজেটে নিম্নলিখিত অ্যাট্রিবিউট আছে:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minResizeWidth="160dp" android:minResizeHeight="110dp" android:maxResizeWidth="250dp" android:maxResizeHeight="200dp"> </appwidget-provider>
আগের কোড স্নিপেটের অর্থ হল:
smallView১৬০ডিপি (minResizeWidth) × ১১০ডিপি (minResizeHeight) থেকে ১৬০ডিপি × ১৯৯ডিপি (পরবর্তী কাটঅফ পয়েন্ট - ১ডিপি) পর্যন্ত কাজ করে।tallView১৬০ডিপি × ২০০ডিপি থেকে ২১৪ডিপি (পরবর্তী কাটঅফ পয়েন্ট - ১) × ২০০ডিপি পর্যন্ত কাজ করে।wideView২১৫ডিপি × ১১০ডিপি (minResizeHeight) থেকে ২৫০ডিপি (maxResizeWidth) × ২০০ডিপি (maxResizeHeight) পর্যন্ত কাজ করে।
আপনার উইজেটকে অবশ্যই minResizeWidth ×
minResizeHeight থেকে maxResizeWidth × maxResizeHeight সাইজের রেঞ্জকে সাপোর্ট করতে হবে। সেই রেঞ্জের মধ্যে,
লেআউট পরিবর্তন করার জন্য আপনি কাট-অফ পয়েন্ট নির্ধারণ করতে পারবেন।
সঠিক লে-আউট প্রদান করুন
রেসপন্সিভ লেআউটের ছোট সেট যদি সম্ভব না হয়, তাহলে আপনি পরিবর্তে উইজেটটি যে আকারে দেখানো হয় তার জন্য উপযুক্ত বিভিন্ন লেআউট প্রদান করতে পারেন। এটি সাধারণত ফোনের জন্য দুটি সাইজ (পোর্ট্রেট এবং ল্যান্ডস্কেপ মোড) এবং ফোল্ডেবল ডিভাইসের জন্য চারটি সাইজ।
এই সমাধান প্রয়োগ করতে, আপনার অ্যাপকে নিম্নলিখিত ধাপগুলি অনুসরণ করতে হবে:
ওভারলোড
AppWidgetProvider.onAppWidgetOptionsChanged(), যা সাইজের সেট পরিবর্তন হলে কল করা হয়।AppWidgetManager.getAppWidgetOptions()কল করুন, যা সাইজ সহBundleরিটার্ন করে।BundleথেকেAppWidgetManager.OPTION_APPWIDGET_SIZESকী অ্যাক্সেস করুন।
নিম্নলিখিত কোডের উদাহরণ থেকে কীভাবে সঠিক লেআউট প্রদান করতে হয় তা জানুন।
override fun onAppWidgetOptionsChanged( context: Context, appWidgetManager: AppWidgetManager, id: Int, newOptions: Bundle? ) { super.onAppWidgetOptionsChanged(context, appWidgetManager, id, newOptions) // Get the new sizes. val sizes = newOptions?.let { BundleCompat.getParcelableArrayList( it, AppWidgetManager.OPTION_APPWIDGET_SIZES, SizeF::class.java ) } // Check that the list of sizes is provided by the launcher. if (sizes.isNullOrEmpty()) { return } // Map the sizes to the RemoteViews that you want. val remoteViews = RemoteViews(sizes.associateWith(::createRemoteViews)) appWidgetManager.updateAppWidget(id, remoteViews) } // Create the RemoteViews for the given size. private fun createRemoteViews(size: SizeF): RemoteViews { }
আপনার উইজেটের জন্য সাইজ নির্ধারণ করুন
প্রতিটি উইজেটকে Android ১২ বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসের জন্য
targetCellWidth এবং targetCellHeight—অথবা Android-এর সব ভার্সনের জন্য
minWidth এবং minHeight
সংজ্ঞায়িত করতে হবে—যা ডিফল্টভাবে এটি কতটা ন্যূনতম স্পেস ব্যবহার করে তা নির্দেশ করে। তবে, ব্যবহারকারীরা তাদের হোম স্ক্রিনে কোনও উইজেট যোগ করলে,
এটি সাধারণত আপনার উল্লেখ করা ন্যূনতম প্রস্থ এবং উচ্চতার চেয়ে বেশি জায়গা নেয়।
Android হোম স্ক্রিন ব্যবহারকারীদের উপলভ্য স্পেসের একটি গ্রিড অফার করে যেখানে তারা
উইজেট এবং আইকন রাখতে পারে। ডিভাইস অনুযায়ী এই গ্রিড আলাদা হতে পারে; যেমন, অনেক
হ্যান্ডসেটে ৫x৪ গ্রিড থাকে এবং ট্যাবলেটে আরও বড় গ্রিড থাকতে পারে। আপনার উইজেট
যোগ করা হলে, এটি অনুভূমিক এবং উল্লম্বভাবে ন্যূনতম সংখ্যক সেল দখল করার জন্য প্রসারিত হয়,
যা Android 12 বা তার পরবর্তী যেকোনও ভার্সনে চলা ডিভাইসে
targetCellWidth এবং targetCellHeight-এর জন্য সীমাবদ্ধতা পূরণ করতে প্রয়োজন, অথবা Android 11 (API লেভেল ৩০) বা তার আগের যেকোনও ভার্সনে চলা ডিভাইসে
minWidth এবং minHeight সীমাবদ্ধতা পূরণ করতে প্রয়োজন।
বিভিন্ন ডিভাইসে সেলের মাপ ও অটোমেটিক মার্জিন আলাদা আলাদা হয়। আপনি যতগুলি গ্রিড সেল ব্যবহার করতে চান তার ভিত্তিতে, সাধারণ ৫x৪ গ্রিড হ্যান্ডসেটে আপনার উইজেটের ন্যূনতম ডাইমেনশন অনুমান করতে নিম্নলিখিত টেবিলটি ব্যবহার করুন:
| সেলের সংখ্যা (প্রস্থ x উচ্চতা) | পোর্ট্রেট মোডে উপলভ্য সাইজ (dp) | ল্যান্ডস্কেপ মোডে উপলভ্য সাইজ (dp) |
|---|---|---|
| ১x১ | ৫৭x১০২ডিপি | ১২৭x৫১ডিপি |
| ২x১ | ১৩০x১০২ডিপি | ২৬৯x৫১ডিপি |
| ৩x১ | ২০৩x১০২ডিপি | ৪১২x৫১ডিপি |
| ৪x১ | ২৭৬x১০২ডিপি | ৫৫৪x৫১ডিপি |
| ৫x১ | ৩৪৯x১০২ডিপি | 697x51dp |
| ৫x২ | ৩৪৯x২২০ডিপি | ৬৯৭x১১৭ডিপি |
| ৫×৩ | ৩৪৯x৩৩৭ডিপি | ৬৯৭x১৮৪ডিপি |
| ৫x৪ | ৩৪৯x৪৫৫ডিপি | ৬৯৭x২৫০ডিপি |
| ... | ... | ... |
| n x m | (73n - 16) x (118m - 16) | (142n - 15) x (66m - 15) |
minWidth, minResizeWidth এবং maxResizeWidth অ্যাট্রিবিউটের জন্য আপনার দেওয়া ভ্যালু জানাতে
পোর্ট্রেট মোড সেল সাইজ ব্যবহার করুন। একইভাবে,
minHeight, minResizeHeight এবং maxResizeHeight অ্যাট্রিবিউটের জন্য
আপনার দেওয়া মান জানাতে ল্যান্ডস্কেপ মোড সেল সাইজ ব্যবহার করুন।
এর কারণ হল, ল্যান্ডস্কেপ মোডের তুলনায় পোর্ট্রেট মোডে সেলের প্রস্থ সাধারণত কম হয়—এবং, একইভাবে, পোর্ট্রেট মোডের তুলনায় ল্যান্ডস্কেপ মোডে সেলের উচ্চতা সাধারণত কম হয়।
যেমন, আপনি যদি চান যে Google Pixel 4-এ আপনার উইজেটের প্রস্থ ছোট করে একটি সেল পর্যন্ত করা হোক,
তাহলে আপনাকে minResizeWidth-এর মান ৫৭ডিপি-র চেয়ে কম রাখতে হবে,
তাই minResizeWidth-এর মান সর্বাধিক ৫৬ডিপি সেট করতে হবে—কারণ পোর্ট্রেট মোডে একটি সেল কমপক্ষে ৫৭ডিপি চওড়া হয়।
একইভাবে, আপনি যদি একই ডিভাইসে একটি সেলে আপনার উইজেটের উচ্চতা পরিবর্তনযোগ্য করতে চান, তাহলে আপনাকে minResizeHeight অ্যাট্রিবিউটের মান 51dp-এর চেয়ে কম তা নিশ্চিত করতে
আপনার minResizeHeight সর্বাধিক 50dp-তে সেট করতে হবে—কারণ ল্যান্ডস্কেপ মোডে একটি সেল কমপক্ষে 51dp উচ্চতার হয়।
প্রতিটি উইজেট minResizeWidth/minResizeHeight এবং maxResizeWidth/maxResizeHeight অ্যাট্রিবিউটের মধ্যে সাইজ রেঞ্জের মধ্যে রিসাইজ করা যায়, যার অর্থ হল এটিকে তাদের মধ্যে যেকোনও সাইজ রেঞ্জের সাথে মানিয়ে নিতে হবে।
যেমন, প্লেসমেন্টে উইজেটের ডিফল্ট সাইজ সেট করতে, আপনি নিম্নলিখিত অ্যাট্রিবিউট সেট করতে পারেন:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:targetCellWidth="3" android:targetCellHeight="2" android:minWidth="180dp" android:minHeight="110dp"> </appwidget-provider>
এর অর্থ হল, উইজেটের ডিফল্ট সাইজ হল ৩x২ সেল, যা
targetCellWidth এবং targetCellHeight অ্যাট্রিবিউট দ্বারা নির্দিষ্ট করা হয়েছে—অথবা ১৮০×১১০dp, যা
Android ১১ বা তার আগের যেকোনও ভার্সনে চলা ডিভাইসের জন্য
minWidth এবং minHeight দ্বারা নির্দিষ্ট করা হয়েছে। পরের ক্ষেত্রে, ডিভাইসের উপর নির্ভর করে সেলের সাইজ
আলাদা হতে পারে।
এছাড়াও, আপনার উইজেটের কাজ করে এমন সাইজের রেঞ্জ সেট করতে, আপনি নিম্নলিখিত অ্যাট্রিবিউট সেট করতে পারেন:
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" android:minResizeWidth="180dp" android:minResizeHeight="110dp" android:maxResizeWidth="530dp" android:maxResizeHeight="450dp"> </appwidget-provider>
আগের অ্যাট্রিবিউট অনুযায়ী, উইজেটের প্রস্থ ১৮০dp থেকে ৫৩০dp পর্যন্ত এবং উচ্চতা ১১০dp থেকে ৪৫০dp পর্যন্ত ছোট-বড় করা যায়। নিম্নলিখিত শর্তগুলি পূরণ হলে, উইজেটের সাইজ 3x2 থেকে 5x2 সেলে পরিবর্তন করা যাবে:
- ডিভাইসে ৫x৪ গ্রিড আছে।
- সেলের সংখ্যা এবং ডিপি-তে উপলভ্য সাইজের মধ্যে ম্যাপিং এই পৃষ্ঠায় ন্যূনতম ডাইমেনশনের অনুমান দেখানো টেবিল অনুসরণ করে।
- উইজেটটি সেই সাইজের রেঞ্জে মানিয়ে নেয়।
val smallView = RemoteViews(context.packageName, R.layout.widget_weather_forecast_small) val mediumView = RemoteViews(context.packageName, R.layout.widget_weather_forecast_medium) val largeView = RemoteViews(context.packageName, R.layout.widget_weather_forecast_large) val viewMapping: Map<SizeF, RemoteViews> = mapOf( SizeF(180f, 110f) to smallView, SizeF(270f, 110f) to mediumView, SizeF(270f, 280f) to largeView ) appWidgetManager.updateAppWidget(appWidgetId, RemoteViews(viewMapping))
ধরে নিন যে উইজেটটি পূর্ববর্তী কোড স্নিপেটে সংজ্ঞায়িত রেসপন্সিভ লেআউট ব্যবহার করে। এর অর্থ হল, R.layout.widget_weather_forecast_small হিসেবে নির্দিষ্ট করা লেআউট
১৮০ডিপি (minResizeWidth) x ১১০ডিপি (minResizeHeight) থেকে
২৬৯x২৭৯ডিপি (পরবর্তী কাটঅফ পয়েন্ট - ১) পর্যন্ত ব্যবহার করা হয়। একইভাবে,
R.layout.widget_weather_forecast_medium ২৭০x১১০ডিপি থেকে ২৭০x২৭৯ডিপি পর্যন্ত ব্যবহার করা হয়,
এবং R.layout.widget_weather_forecast_large ২৭০x২৮০ডিপি থেকে
৫৩০ডিপি (maxResizeWidth) x ৪৫০ডিপি (maxResizeHeight) পর্যন্ত ব্যবহার করা হয়।
ব্যবহারকারী উইজেটের সাইজ পরিবর্তন করলে, সেলের প্রতিটি সাইজের সাথে মানানসই করার জন্য এটির চেহারা পরিবর্তিত হয়, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে।
R.layout.widget_weather_forecast_small।
R.layout.widget_weather_forecast_medium.
R.layout.widget_weather_forecast_medium.
R.layout.widget_weather_forecast_large।
R.layout.widget_weather_forecast_large।