মেনু অনেক ধরনের অ্যাপের একটি সাধারণ ইউজার ইন্টারফেস উপাদান। একটি পরিচিত ও সামঞ্জস্যপূর্ণ ইউজার এক্সপেরিয়েন্স প্রদানের জন্য, আপনার অ্যাক্টিভিটিগুলোতে ব্যবহারকারীর কার্যকলাপ এবং অন্যান্য অপশনগুলো উপস্থাপন করতে Menu APIs) ব্যবহার করুন।
এই ডকুমেন্টটিতে দেখানো হয়েছে কীভাবে অ্যান্ড্রয়েডের সকল সংস্করণে তিন ধরনের মৌলিক মেনু বা অ্যাকশন প্রেজেন্টেশন তৈরি করতে হয়:
- বিকল্প মেনু এবং অ্যাপ বার
- অপশন মেনু হলো কোনো অ্যাক্টিভিটির মেনু আইটেমগুলোর প্রধান সংগ্রহ। এখানেই আপনি এমন অ্যাকশনগুলো রাখেন যেগুলো অ্যাপের উপর সার্বিক প্রভাব ফেলে, যেমন "সার্চ," "কম্পোজ ইমেল," এবং "সেটিংস।"
বিকল্প মেনু তৈরি করুন বিভাগটি দেখুন।
- প্রসঙ্গ মেনু এবং প্রাসঙ্গিক ক্রিয়া মোড
- কন্টেক্সট মেনু হলো একটি ভাসমান মেনু যা ব্যবহারকারী কোনো এলিমেন্টের উপর টাচ ও হোল্ড করলে প্রদর্শিত হয়। এটি এমন কিছু অ্যাকশন প্রদান করে যা নির্বাচিত কন্টেন্ট বা কন্টেক্সট ফ্রেমকে প্রভাবিত করে।
কনটেক্সচুয়াল অ্যাকশন মোড স্ক্রিনের উপরের একটি বারে নির্বাচিত কন্টেন্টকে প্রভাবিত করে এমন অ্যাকশন আইটেমগুলো প্রদর্শন করে এবং ব্যবহারকারীকে একাধিক আইটেম নির্বাচন করার সুযোগ দেয়।
কনটেক্সচুয়াল মেনু তৈরি করুন বিভাগটি দেখুন।
- পপআপ মেনু
- একটি পপআপ মেনু আইটেমগুলির একটি উল্লম্ব তালিকা প্রদর্শন করে, যা মেনুটি চালু করা ভিউ-এর সাথে অ্যাঙ্কর করা থাকে। এটি নির্দিষ্ট কন্টেন্টের সাথে সম্পর্কিত অ্যাকশনগুলির একটি ওভারফ্লো প্রদান করতে অথবা কোনো কমান্ডের দ্বিতীয় অংশের জন্য বিকল্প সরবরাহ করতে উপযোগী। একটি পপআপ মেনুর অ্যাকশনগুলি সংশ্লিষ্ট কন্টেন্টকে সরাসরি প্রভাবিত করে না—সেই কাজের জন্য রয়েছে কনটেক্সচুয়াল অ্যাকশন। বরং, পপআপ মেনুটি আপনার অ্যাক্টিভিটির কন্টেন্টের বিভিন্ন অঞ্চলের সাথে সম্পর্কিত বর্ধিত অ্যাকশনগুলির জন্য ব্যবহৃত হয়।
পপআপ মেনু তৈরি করুন বিভাগটি দেখুন।
XML-এ একটি মেনু সংজ্ঞায়িত করুন
সব ধরনের মেনুর জন্য, অ্যান্ড্রয়েড মেনু আইটেমগুলো সংজ্ঞায়িত করতে একটি স্ট্যান্ডার্ড XML ফরম্যাট প্রদান করে। আপনার অ্যাক্টিভিটির কোডে মেনু তৈরি করার পরিবর্তে, একটি XML মেনু রিসোর্সে মেনু এবং এর সমস্ত আইটেম সংজ্ঞায়িত করুন। এরপর আপনি আপনার অ্যাক্টিভিটি বা ফ্র্যাগমেন্টে মেনু রিসোর্সটিকে একটি Menu অবজেক্ট হিসেবে লোড করে ইনফ্লেট করতে পারেন।
নিম্নলিখিত কারণগুলোর জন্য মেনু রিসোর্স ব্যবহার করা একটি ভালো অভ্যাস:
- XML-এ মেনুর কাঠামোটি কল্পনা করা সহজ।
- এটি আপনার অ্যাপের বিহেভিওরাল কোড থেকে মেনুর বিষয়বস্তুকে আলাদা করে।
- এটি অ্যাপ রিসোর্স ফ্রেমওয়ার্ক ব্যবহার করে আপনাকে বিভিন্ন প্ল্যাটফর্ম সংস্করণ, স্ক্রিনের আকার এবং অন্যান্য কনফিগারেশনের জন্য বিকল্প মেনু কনফিগারেশন তৈরি করতে দেয়।
একটি মেনু নির্ধারণ করতে, আপনার প্রোজেক্টের res/menu/ ডিরেক্টরির ভিতরে একটি XML ফাইল তৈরি করুন এবং নিম্নলিখিত উপাদানগুলি দিয়ে মেনুটি গঠন করুন:
-
<menu> - একটি
Menuসংজ্ঞায়িত করে, যা মেনু আইটেমগুলির জন্য একটি ধারক। একটি<menu>এলিমেন্টকে অবশ্যই ফাইলের রুট নোড হতে হবে এবং এটি এক বা একাধিক<item>এবং<group>এলিমেন্ট ধারণ করতে পারে। -
<item> - একটি
MenuItemতৈরি করে, যা একটি মেনুর একটিমাত্র আইটেমকে উপস্থাপন করে। একটি সাবমেনু তৈরি করার জন্য এই এলিমেন্টটির মধ্যে একটি নেস্টেড<menu>এলিমেন্ট থাকতে পারে। -
<group> -
<item>এলিমেন্টগুলোর জন্য একটি ঐচ্ছিক, অদৃশ্য কন্টেইনার। এটি আপনাকে মেনু আইটেমগুলোকে শ্রেণিবদ্ধ করতে দেয়, যাতে তারা সক্রিয় অবস্থা এবং দৃশ্যমানতার মতো বৈশিষ্ট্যগুলো একই রাখতে পারে। আরও তথ্যের জন্য, "একটি মেনু গ্রুপ তৈরি করুন" বিভাগটি দেখুন।
এখানে game_menu.xml নামের একটি মেনুর উদাহরণ দেওয়া হলো:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/new_game" android:icon="@drawable/ic_new_game" android:title="@string/new_game" app:showAsAction="ifRoom"/> <item android:id="@+id/help" android:icon="@drawable/ic_help" android:title="@string/help" /> </menu>
<item> এলিমেন্টটি বেশ কিছু অ্যাট্রিবিউট সমর্থন করে, যা ব্যবহার করে একটি আইটেমের চেহারা ও আচরণ নির্ধারণ করা যায়। পূর্ববর্তী মেনুর আইটেমগুলোতে নিম্নলিখিত অ্যাট্রিবিউটগুলো অন্তর্ভুক্ত রয়েছে:
-
android:id - আইটেমটির একটি অনন্য রিসোর্স আইডি, যা ব্যবহারকারী আইটেমটি নির্বাচন করলে অ্যাপটিকে তা শনাক্ত করতে সাহায্য করে।
-
android:icon - আইটেমটির আইকন হিসেবে ব্যবহার করার জন্য একটি ড্রয়েবলের রেফারেন্স।
-
android:title - আইটেমটির শিরোনাম হিসেবে ব্যবহার করার জন্য একটি স্ট্রিং-এর রেফারেন্স।
-
android:showAsAction - অ্যাপ বারে এই আইটেমটি কখন এবং কীভাবে একটি অ্যাকশন আইটেম হিসেবে প্রদর্শিত হবে তার নির্দিষ্ট বিবরণ।
এগুলোই আপনার ব্যবহৃত সবচেয়ে গুরুত্বপূর্ণ অ্যাট্রিবিউট, তবে আরও অনেক অ্যাট্রিবিউট উপলব্ধ আছে। সমস্ত সমর্থিত অ্যাট্রিবিউট সম্পর্কে তথ্যের জন্য, মেনু রিসোর্স ডকুমেন্টেশন দেখুন।
যেকোনো মেনুর কোনো আইটেমে একটি <item> চাইল্ড হিসেবে একটি <menu> এলিমেন্ট যোগ করে আপনি একটি সাবমেনু যোগ করতে পারেন। সাবমেনু তখন কাজে আসে যখন আপনার অ্যাপে অনেকগুলো ফাংশন থাকে যেগুলোকে বিভিন্ন বিষয় অনুযায়ী সাজানো যায়, যেমন একটি পিসি অ্যাপের মেনু বারের আইটেমগুলো—উদাহরণস্বরূপ ফাইল , এডিট এবং ভিউ । নিচের উদাহরণটি দেখুন:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/file" android:title="@string/file" > <!-- "file" submenu --> <menu> <item android:id="@+id/create_new" android:title="@string/create_new" /> <item android:id="@+id/open" android:title="@string/open" /> </menu> </item> </menu>
আপনার অ্যাক্টিভিটিতে মেনুটি ব্যবহার করতে, MenuInflater.inflate() ব্যবহার করে XML রিসোর্সটিকে একটি প্রোগ্রামেবল অবজেক্টে রূপান্তর করে মেনু রিসোর্সটি _inflate_ করুন। নিম্নলিখিত বিভাগগুলিতে প্রতিটি মেনু প্রকারের জন্য কীভাবে একটি মেনু ইনফ্লেট করতে হয় তা দেখানো হয়েছে।
একটি বিকল্প মেনু তৈরি করুন
চিত্র ১-এ দেখানো অপশন মেনুটি হলো এমন একটি জায়গা, যেখানে আপনি বর্তমান কার্যকলাপের প্রেক্ষাপটের সাথে প্রাসঙ্গিক অ্যাকশন এবং অন্যান্য অপশনগুলো অন্তর্ভুক্ত করেন, যেমন—"সার্চ," "কম্পোজ ইমেল," এবং "সেটিংস।"

আপনি আপনার Activity সাবক্লাস অথবা Fragment সাবক্লাস থেকে অপশন মেনুর জন্য আইটেম ডিক্লেয়ার করতে পারেন। যদি আপনার Activity এবং Fragment উভয়ই অপশন মেনুর জন্য আইটেম ডিক্লেয়ার করে, তাহলে UI-তে আইটেমগুলো একত্রিত হয়ে যায়। Activity-র আইটেমগুলো প্রথমে প্রদর্শিত হয়, এরপর প্রতিটি Fragment-এর আইটেমগুলো সেই ক্রমে প্রদর্শিত হয়, যে ক্রমে Fragment-গুলো Activity-তে যুক্ত করা হয়েছে। প্রয়োজনে, আপনি যে <item> সরাতে চান, সেটিতে android:orderInCategory অ্যাট্রিবিউট ব্যবহার করে মেনু আইটেমগুলোর ক্রম পরিবর্তন করতে পারেন।
কোনো অ্যাক্টিভিটির জন্য অপশন মেনু নির্দিষ্ট করতে, onCreateOptionsMenu() ওভাররাইড করুন। ফ্র্যাগমেন্টগুলো তাদের নিজস্ব onCreateOptionsMenu() কলব্যাক প্রদান করে। এই মেথডে, আপনি XML-এ সংজ্ঞায়িত আপনার মেনু রিসোর্সটিকে কলব্যাকে প্রদত্ত Menu তে ইনফ্লেট করতে পারেন। এটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
override fun onCreateOptionsMenu(menu: Menu): Boolean { val inflater: MenuInflater = menuInflater inflater.inflate(R.menu.game_menu, menu) return true }
জাভা
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.game_menu, menu); return true; }
আপনি add() ব্যবহার করে মেনু আইটেম যোগ করতে পারেন এবং MenuItem API ব্যবহার করে findItem() দিয়ে আইটেমগুলো পুনরুদ্ধার করে তাদের বৈশিষ্ট্যগুলো সংশোধন করতে পারেন।
ক্লিক ইভেন্টগুলি পরিচালনা করুন
যখন ব্যবহারকারী অপশন মেনু থেকে কোনো আইটেম নির্বাচন করেন, যার মধ্যে অ্যাপ বারের অ্যাকশন আইটেমগুলোও অন্তর্ভুক্ত, তখন সিস্টেম আপনার অ্যাক্টিভিটির onOptionsItemSelected() মেথডটি কল করে। এই মেথডটি নির্বাচিত MenuItem পাস করে। আপনি getItemId() কল করে আইটেমটি শনাক্ত করতে পারেন, যা মেনু আইটেমটির জন্য একটি অনন্য আইডি রিটার্ন করে। এই আইডিটি মেনু রিসোর্সের android:id অ্যাট্রিবিউট দ্বারা অথবা add() মেথডে দেওয়া একটি পূর্ণসংখ্যা দ্বারা সংজ্ঞায়িত করা হয়। উপযুক্ত কাজটি সম্পাদন করার জন্য আপনি এই আইডিটি পরিচিত মেনু আইটেমগুলোর সাথে মেলাতে পারেন।
কোটলিন
override fun onOptionsItemSelected(item: MenuItem): Boolean { // Handle item selection. return when (item.itemId) { R.id.new_game -> { newGame() true } R.id.help -> { showHelp() true } else -> super.onOptionsItemSelected(item) } }
জাভা
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection. switch (item.getItemId()) { case R.id.new_game: newGame(); return true; case R.id.help: showHelp(); return true; default: return super.onOptionsItemSelected(item); } }
যখন আপনি সফলভাবে একটি মেনু আইটেম হ্যান্ডেল করবেন, তখন true রিটার্ন করুন। যদি আপনি মেনু আইটেমটি হ্যান্ডেল না করেন, তাহলে সুপারক্লাসের onOptionsItemSelected() ইমপ্লিমেন্টেশনটি কল করুন। ডিফল্ট ইমপ্লিমেন্টেশনটি false রিটার্ন করে।
আপনার অ্যাক্টিভিটিতে যদি ফ্র্যাগমেন্ট থাকে, তাহলে সিস্টেম প্রথমে অ্যাক্টিভিটির জন্য onOptionsItemSelected() কল করে, তারপর ফ্র্যাগমেন্টগুলো যুক্ত হওয়ার ক্রমানুসারে প্রতিটি ফ্র্যাগমেন্টের জন্য কল করতে থাকে, যতক্ষণ না কোনো একটি true রিটার্ন করে অথবা সমস্ত ফ্র্যাগমেন্ট কল করা হয়।
রানটাইমে মেনু আইটেম পরিবর্তন করুন
সিস্টেম onCreateOptionsMenu() কল করার পর, এটি আপনার তৈরি করা Menu একটি ইনস্ট্যান্স ধরে রাখে এবং মেনুটি বাতিল না হওয়া পর্যন্ত আর onCreateOptionsMenu() কল করে না। তবে, onCreateOptionsMenu() শুধুমাত্র মেনুর প্রাথমিক অবস্থা তৈরি করতে ব্যবহার করুন, অ্যাক্টিভিটির জীবনচক্র চলাকালীন কোনো পরিবর্তন করতে নয়।
অ্যাক্টিভিটি লাইফসাইকেল চলাকালীন ঘটা ইভেন্টের উপর ভিত্তি করে যদি আপনি অপশন মেনুটি পরিবর্তন করতে চান, তবে আপনি onPrepareOptionsMenu() মেথডে তা করতে পারেন। এই মেথডটি আপনাকে Menu অবজেক্টটি তার বর্তমান অবস্থায় পাস করে, যাতে আপনি আইটেম যোগ, অপসারণ বা নিষ্ক্রিয় করার মতো কাজগুলো করতে পারেন। ফ্র্যাগমেন্টগুলোও একটি onPrepareOptionsMenu() কলব্যাক প্রদান করে।
অ্যাপ বারে মেনু আইটেমগুলো প্রদর্শিত হলে অপশন মেনুটি সর্বদা খোলা বলে বিবেচিত হয়। যখন কোনো ইভেন্ট ঘটে এবং আপনি মেনুটি আপডেট করতে চান, তখন সিস্টেমকে onPrepareOptionsMenu() invalidateOptionsMenu() () কল করুন।
একটি প্রাসঙ্গিক মেনু তৈরি করুন

একটি কনটেক্সচুয়াল মেনু এমন কিছু অ্যাকশন বা কাজ করার সুযোগ দেয় যা UI-এর কোনো নির্দিষ্ট আইটেম বা কনটেক্সট ফ্রেমকে প্রভাবিত করে। আপনি যেকোনো ভিউ-এর জন্য একটি কনটেক্সট মেনু দিতে পারেন, তবে এগুলি প্রায়শই RecylerView বা অন্যান্য ভিউ কালেকশনের আইটেমগুলির জন্য ব্যবহৃত হয়, যেখানে ব্যবহারকারী প্রতিটি আইটেমের উপর সরাসরি অ্যাকশন সম্পাদন করতে পারে।
প্রাসঙ্গিক ক্রিয়া প্রদান করার দুটি উপায় আছে:
- একটি ফ্লোটিং কনটেক্সট মেনুতে , ব্যবহারকারী যখন কনটেক্সট মেনুর জন্য সমর্থন ঘোষণা করে এমন কোনো ভিউতে টাচ ও হোল্ড করেন, তখন মেনুটি একটি ডায়ালগের মতো মেনু আইটেমগুলির একটি ভাসমান তালিকা হিসাবে প্রদর্শিত হয়। ব্যবহারকারীরা একবারে একটি আইটেমের উপর প্রাসঙ্গিক অ্যাকশন সম্পাদন করতে পারেন।
- কনটেক্সচুয়াল অ্যাকশন মোডে । এই মোডটি হলো
ActionModeএকটি সিস্টেম ইমপ্লিমেন্টেশন, যা স্ক্রিনের উপরে একটি কনটেক্সচুয়াল অ্যাকশন বার বা CAB প্রদর্শন করে। এতে এমন সব অ্যাকশন আইটেম থাকে যা নির্বাচিত আইটেম(গুলি)কে প্রভাবিত করে। যখন এই মোডটি সক্রিয় থাকে, ব্যবহারকারীরা একই সাথে একাধিক আইটেমের উপর কোনো কাজ সম্পাদন করতে পারেন, যদি আপনার অ্যাপটি তা সমর্থন করে।
দ্রষ্টব্য: কনটেক্সট মেনু আইটেম শর্টকাট এবং আইটেম আইকন সমর্থন করে না।
একটি ভাসমান প্রসঙ্গ মেনু তৈরি করুন
একটি ভাসমান কনটেক্সট মেনু প্রদান করতে, নিম্নলিখিতগুলি করুন:
- যে
Viewসাথে কনটেক্সট মেনুটি যুক্ত, সেটিকে রেজিস্টার করতেregisterForContextMenu()কল করুন এবং এতেViewপাস করুন।যদি আপনার অ্যাক্টিভিটিতে একটি
RecyclerViewব্যবহৃত হয় এবং আপনি চান যে প্রতিটি আইটেম একই কনটেক্সট মেনু প্রদান করুক, তাহলেregisterForContextMenu()ফাংশনেRecyclerViewপাস করে কনটেক্সট মেনুর জন্য সমস্ত আইটেম রেজিস্টার করুন। - আপনার
ActivityবাFragmentএonCreateContextMenu()মেথডটি ইমপ্লিমেন্ট করুন।যখন নিবন্ধিত ভিউটি একটি টাচ অ্যান্ড হোল্ড ইভেন্ট পায়, তখন সিস্টেম আপনার
onCreateContextMenu()মেথডটি কল করে। এখানেই আপনি মেনু আইটেমগুলো সংজ্ঞায়িত করেন, সাধারণত একটি মেনু রিসোর্স ইনফ্লেট করার মাধ্যমে, যেমনটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:কোটলিন
override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo) { super.onCreateContextMenu(menu, v, menuInfo) val inflater: MenuInflater = menuInflater inflater.inflate(R.menu.context_menu, menu) }
জাভা
@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { super.onCreateContextMenu(menu, v, menuInfo); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); }
MenuInflaterআপনাকে একটি মেনু রিসোর্স থেকে কনটেক্সট মেনু ইনফ্লেট করতে দেয়। কলব্যাক মেথডের প্যারামিটারগুলোর মধ্যে থাকে ব্যবহারকারীর নির্বাচিতViewএবং একটিContextMenu.ContextMenuInfoঅবজেক্ট, যা নির্বাচিত আইটেমটি সম্পর্কে অতিরিক্ত তথ্য প্রদান করে। যদি আপনার অ্যাক্টিভিটিতে একাধিক ভিউ থাকে এবং প্রতিটি ভিন্ন ভিন্ন কনটেক্সট মেনু প্রদান করে, তবে কোন কনটেক্সট মেনুটি ইনফ্লেট করবেন তা নির্ধারণ করতে আপনি এই প্যারামিটারগুলো ব্যবহার করতে পারেন। নিচের উদাহরণে দেখানো অনুযায়ী
onContextItemSelected()মেথডটি ইমপ্লিমেন্ট করুন। যখন ব্যবহারকারী কোনো মেনু আইটেম নির্বাচন করেন, তখন সিস্টেম এই মেথডটিকে কল করে, যাতে আপনি উপযুক্ত কাজটি করতে পারেন।কোটলিন
override fun onContextItemSelected(item: MenuItem): Boolean { val info = item.menuInfo as AdapterView.AdapterContextMenuInfo return when (item.itemId) { R.id.edit -> { editNote(info.id) true } R.id.delete -> { deleteNote(info.id) true } else -> super.onContextItemSelected(item) } }
জাভা
@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case R.id.edit: editNote(info.id); return true; case R.id.delete: deleteNote(info.id); return true; default: return super.onContextItemSelected(item); } }
getItemId()মেথডটি নির্বাচিত মেনু আইটেমের আইডি কোয়েরি করে, যা আপনি XML-এandroid:idঅ্যাট্রিবিউট ব্যবহার করে প্রতিটি মেনু আইটেমে নির্ধারণ করেন, যেমনটি "XML-এ একটি মেনু সংজ্ঞায়িত করুন" অংশে দেখানো হয়েছে।যখন আপনি সফলভাবে একটি মেনু আইটেম হ্যান্ডেল করেন, তখন
trueরিটার্ন করুন। যদি আপনি মেনু আইটেমটি হ্যান্ডেল না করেন, তবে মেনু আইটেমটি সুপারক্লাস ইমপ্লিমেন্টেশনে পাঠিয়ে দিন। যদি আপনার অ্যাক্টিভিটিতে ফ্র্যাগমেন্ট থাকে, তবে অ্যাক্টিভিটি প্রথমে এই কলব্যাকটি গ্রহণ করে। হ্যান্ডেল না করা অবস্থায় সুপারক্লাসকে কল করার মাধ্যমে, সিস্টেম ইভেন্টটিকে প্রতিটি ফ্র্যাগমেন্টের সংশ্লিষ্ট কলব্যাক মেথডে এক এক করে, প্রতিটি ফ্র্যাগমেন্ট যুক্ত হওয়ার ক্রমানুসারে পাঠাতে থাকে, যতক্ষণ নাtrueবাfalseরিটার্ন করা হয়।Activityএবংandroid.app.Fragmentএর ডিফল্ট ইমপ্লিমেন্টেশনগুলোfalseরিটার্ন করে, তাই হ্যান্ডেল না করা অবস্থায় সর্বদা সুপারক্লাসকে কল করুন।
প্রসঙ্গিক অ্যাকশন মোড ব্যবহার করুন
কনটেক্সচুয়াল অ্যাকশন মোড হলো ActionMode একটি সিস্টেম ইমপ্লিমেন্টেশন, যা ব্যবহারকারীর ইন্টারঅ্যাকশনকে প্রাসঙ্গিক কাজ সম্পাদনের দিকে চালিত করে। যখন কোনো ব্যবহারকারী একটি আইটেম নির্বাচন করে এই মোডটি চালু করেন, তখন স্ক্রিনের উপরে একটি কনটেক্সচুয়াল অ্যাকশন বার প্রদর্শিত হয়, যেখানে ব্যবহারকারী নির্বাচিত আইটেমগুলোর উপর সম্পাদনযোগ্য কাজগুলো দেখতে পান। এই মোডটি চালু থাকা অবস্থায়, ব্যবহারকারী একাধিক আইটেম নির্বাচন করতে পারেন (যদি আপনার অ্যাপ তা সমর্থন করে), এবং আইটেমগুলোর নির্বাচন বাতিল করে অ্যাক্টিভিটির মধ্যে নেভিগেট করা চালিয়ে যেতে পারেন। যখন ব্যবহারকারী সমস্ত আইটেমের নির্বাচন বাতিল করেন, 'ব্যাক' বোতামে ট্যাপ করেন, অথবা বারের বাম দিকে থাকা ' ডান ' অ্যাকশনে ট্যাপ করেন, তখন অ্যাকশন মোডটি নিষ্ক্রিয় হয়ে যায় এবং কনটেক্সচুয়াল অ্যাকশন বারটি অদৃশ্য হয়ে যায়।
যেসব ভিউ প্রাসঙ্গিক অ্যাকশন প্রদান করে, সেগুলোর ক্ষেত্রে সাধারণত এই দুটি ঘটনার এক বা উভয়টি ঘটলে প্রাসঙ্গিক অ্যাকশন মোড চালু করা হয়:
- ব্যবহারকারী ভিউটির উপর স্পর্শ করে ধরে রাখেন।
- ব্যবহারকারী ভিউটির মধ্যে একটি চেকবক্স বা অনুরূপ UI উপাদান নির্বাচন করেন।
আপনার অ্যাপ কীভাবে কনটেক্সচুয়াল অ্যাকশন মোড চালু করে এবং প্রতিটি অ্যাকশনের আচরণ নির্ধারণ করে, তা আপনার ডিজাইনের উপর নির্ভর করে। দুই ধরনের ডিজাইন রয়েছে:
- স্বতন্ত্র, যথেচ্ছ দৃষ্টিভঙ্গির উপর প্রাসঙ্গিক ক্রিয়াকলাপের জন্য।
-
RecyclerViewতে থাকা আইটেমের গ্রুপগুলোর উপর ব্যাচভিত্তিক প্রাসঙ্গিক অ্যাকশন নেওয়ার জন্য, যা ব্যবহারকারীকে একাধিক আইটেম নির্বাচন করে সেগুলোর সবকটির উপর একটি অ্যাকশন সম্পাদন করতে দেয়।
নিম্নলিখিত বিভাগগুলিতে প্রথম পরিস্থিতির জন্য প্রয়োজনীয় সেটআপ বর্ণনা করা হয়েছে।
স্বতন্ত্র ভিউগুলির জন্য প্রাসঙ্গিক অ্যাকশন মোড সক্রিয় করুন
যদি আপনি শুধুমাত্র ব্যবহারকারী নির্দিষ্ট ভিউ নির্বাচন করলেই কনটেক্সচুয়াল অ্যাকশন মোড চালু করতে চান, তাহলে নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
- নিম্নলিখিত উদাহরণে দেখানো অনুযায়ী
ActionMode.Callbackইন্টারফেসটি ইমপ্লিমেন্ট করুন। এর কলব্যাক মেথডগুলিতে, আপনি কনটেক্সচুয়াল অ্যাকশন বারের জন্য অ্যাকশনগুলি নির্দিষ্ট করতে, অ্যাকশন আইটেমগুলিতে ক্লিক ইভেন্টের প্রতিক্রিয়া জানাতে এবং অ্যাকশন মোডের জন্য অন্যান্য লাইফসাইকেল ইভেন্টগুলি পরিচালনা করতে পারেন।কোটলিন
private val actionModeCallback = object : ActionMode.Callback { // Called when the action mode is created. startActionMode() is called. override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { // Inflate a menu resource providing context menu items. val inflater: MenuInflater = mode.menuInflater inflater.inflate(R.menu.context_menu, menu) return true } // Called each time the action mode is shown. Always called after // onCreateActionMode, and might be called multiple times if the mode // is invalidated. override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean { return false // Return false if nothing is done } // Called when the user selects a contextual menu item. override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { return when (item.itemId) { R.id.menu_share -> { shareCurrentItem() mode.finish() // Action picked, so close the CAB. true } else -> false } } // Called when the user exits the action mode. override fun onDestroyActionMode(mode: ActionMode) { actionMode = null } }
জাভা
private ActionMode.Callback actionModeCallback = new ActionMode.Callback() { // Called when the action mode is created. startActionMode() is called. @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // Inflate a menu resource providing context menu items. MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); return true; } // Called each time the action mode is shown. Always called after // onCreateActionMode, and might be called multiple times if the mode // is invalidated. @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; // Return false if nothing is done. } // Called when the user selects a contextual menu item. @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.menu_share: shareCurrentItem(); mode.finish(); // Action picked, so close the CAB. return true; default: return false; } } // Called when the user exits the action mode. @Override public void onDestroyActionMode(ActionMode mode) { actionMode = null; } };
এই ইভেন্ট কলব্যাকগুলো অপশন মেনুর কলব্যাকগুলোর মতোই, তবে পার্থক্য হলো এগুলোর প্রত্যেকটি ইভেন্টের সাথে যুক্ত
ActionModeঅবজেক্টটিও পাস করে। আপনি CAB-তে বিভিন্ন পরিবর্তন আনার জন্যActionModeAPI ব্যবহার করতে পারেন, যেমনsetTitle()এবংsetSubtitle()ব্যবহার করে টাইটেল ও সাবটাইটেল সংশোধন করা, যা কতগুলো আইটেম নির্বাচিত হয়েছে তা নির্দেশ করতে সহায়ক।পূর্ববর্তী নমুনাটি অ্যাকশন মোড ধ্বংস হয়ে গেলে
actionModeভেরিয়েবলটিকেnullএ সেট করে। পরবর্তী ধাপে দেখুন, এটি কীভাবে ইনিশিয়ালাইজ করা হয় এবং আপনার অ্যাক্টিভিটি বা ফ্র্যাগমেন্টে মেম্বার ভেরিয়েবলটি সংরক্ষণ করা কীভাবে কার্যকর হতে পারে। - যখন আপনি বারটি দেখাতে চান, যেমন ব্যবহারকারী ভিউটির উপর টাচ করে ধরে রাখলে, তখন
startActionMode()কল করুন।কোটলিন
someView.setOnLongClickListener { view -> // Called when the user performs a touch & hold on someView. when (actionMode) { null -> { // Start the CAB using the ActionMode.Callback defined earlier. actionMode = activity?.startActionMode(actionModeCallback) view.isSelected = true true } else -> false } }
জাভা
someView.setOnLongClickListener(new View.OnLongClickListener() { // Called when the user performs a touch & hold on someView. public boolean onLongClick(View view) { if (actionMode != null) { return false; } // Start the CAB using the ActionMode.Callback defined earlier. actionMode = getActivity().startActionMode(actionModeCallback); view.setSelected(true); return true; } });
যখন আপনি
startActionMode()কল করেন, তখন সিস্টেম তৈরি করাActionModeটি ফেরত দেয়। এটিকে একটি মেম্বার ভেরিয়েবলে সংরক্ষণ করে, আপনি অন্যান্য ইভেন্টের প্রতিক্রিয়ায় কনটেক্সচুয়াল অ্যাকশন বারে পরিবর্তন আনতে পারেন। পূর্ববর্তী উদাহরণে, অ্যাকশন মোড শুরু করার আগে মেম্বারটি null কিনা তা পরীক্ষা করে নিশ্চিত করা হয় যে,ActionModeActionModeযদি আগে থেকেই সক্রিয় থাকে তবে যেন এটি পুনরায় তৈরি না হয়।
একটি পপআপ মেনু তৈরি করুন

PopupMenu হলো একটি মোডাল মেনু যা কোনো View সাথে অ্যাঙ্কর করা থাকে। জায়গা থাকলে এটি অ্যাঙ্কর ভিউ-এর নিচে, অন্যথায় ভিউ-এর উপরে প্রদর্শিত হয়। এটি নিম্নলিখিত ক্ষেত্রে উপযোগী:
- চিত্র ৪-এ দেখানো, জিমেইলের ইমেল হেডারের মতো নির্দিষ্ট কন্টেন্টের সাথে সম্পর্কিত অ্যাকশনগুলোর জন্য একটি ওভারফ্লো-স্টাইল মেনু প্রদান করা।
- কোনো কমান্ড বাক্যের দ্বিতীয় অংশ প্রদান করা, যেমন 'Add' চিহ্নিত একটি বাটন যা বিভিন্ন 'Add' অপশনসহ একটি পপ-আপ মেনু তৈরি করে।
-
Spinnerমতো একটি মেনু প্রদান করা, যা কোনো নির্বাচনকে স্থায়ীভাবে ধরে রাখে না।
আপনি যদি XML-এ আপনার মেনুটি নির্ধারণ করেন , তাহলে এইভাবে পপআপ মেনুটি দেখাতে পারেন:
-
PopupMenuতার কনস্ট্রাক্টরের মাধ্যমে ইনস্ট্যানশিয়েট করুন, যা বর্তমান অ্যাপContextএবং যেViewমেনুটি অ্যাঙ্কর করা আছে, তা গ্রহণ করে। -
PopupMenu.getMenu()দ্বারা ফেরত আসাMenuঅবজেক্টে আপনার মেনু রিসোর্সকে ইনফ্লেট করতেMenuInflaterব্যবহার করুন। -
PopupMenu.show()কল করুন।
উদাহরণস্বরূপ, এখানে একটি বাটন রয়েছে যা একটি পপআপ মেনু দেখায়:
<ImageButton android:id="@+id/dropdown_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/descr_overflow_button" android:src="@drawable/arrow_drop_down" />
এরপর অ্যাক্টিভিটিটি পপআপ মেনুটি এইভাবে দেখাতে পারে:
কোটলিন
findViewById<ImageButton>(R.id.dropdown_menu).setOnClickListener { val popup = PopupMenu(this, it) val inflater: MenuInflater = popup.menuInflater inflater.inflate(R.menu.actions, popup.menu) popup.show() }
জাভা
findViewById(R.id.dropdown_menu).setOnClickListener(v -> { PopupMenu popup = new PopupMenu(this, v); popup.getMenuInflater().inflate(R.menu.actions, popup.getMenu()); popup.show(); });
ব্যবহারকারী কোনো আইটেম নির্বাচন করলে বা মেনু এলাকার বাইরে ট্যাপ করলে মেনুটি অদৃশ্য হয়ে যায়। আপনি PopupMenu.OnDismissListener ব্যবহার করে এই ডিসমিস ইভেন্টটি শুনতে পারেন।
ক্লিক ইভেন্টগুলি পরিচালনা করুন
ব্যবহারকারী যখন কোনো মেনু আইটেম নির্বাচন করেন তখন একটি অ্যাকশন সম্পাদন করতে, PopupMenu.OnMenuItemClickListener ইন্টারফেসটি ইমপ্লিমেন্ট করুন এবং setOnMenuItemclickListener() কল করে এটিকে আপনার PopupMenu সাথে রেজিস্টার করুন। যখন ব্যবহারকারী কোনো আইটেম নির্বাচন করেন, তখন সিস্টেম আপনার ইন্টারফেসে থাকা onMenuItemClick() কলব্যাকটি কল করে।
নিম্নলিখিত উদাহরণে এটি দেখানো হয়েছে:
কোটলিন
fun showMenu(v: View) { PopupMenu(this, v).apply { // MainActivity implements OnMenuItemClickListener. setOnMenuItemClickListener(this@MainActivity) inflate(R.menu.actions) show() } } override fun onMenuItemClick(item: MenuItem): Boolean { return when (item.itemId) { R.id.archive -> { archive(item) true } R.id.delete -> { delete(item) true } else -> false } }
জাভা
public void showMenu(View v) { PopupMenu popup = new PopupMenu(this, v); // This activity implements OnMenuItemClickListener. popup.setOnMenuItemClickListener(this); popup.inflate(R.menu.actions); popup.show(); } @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.archive: archive(item); return true; case R.id.delete: delete(item); return true; default: return false; } }
একটি মেনু গ্রুপ তৈরি করুন
মেনু গ্রুপ হলো এমন কিছু মেনু আইটেমের সমষ্টি, যেগুলোর মধ্যে কিছু সাধারণ বৈশিষ্ট্য থাকে। একটি গ্রুপ ব্যবহার করে আপনি নিম্নলিখিত কাজগুলো করতে পারেন:
-
setGroupVisible()ব্যবহার করে সমস্ত আইটেম দেখান বা লুকান। -
setGroupEnabled()ব্যবহার করে সমস্ত আইটেম সক্রিয় বা নিষ্ক্রিয় করুন। -
setGroupCheckable()ব্যবহার করে সমস্ত আইটেম যাচাইযোগ্য কিনা তা নির্দিষ্ট করুন।
আপনি আপনার মেনু রিসোর্সে <group> এলিমেন্টের ভিতরে <item> এলিমেন্ট নেস্ট করে অথবা add() মেথডের সাথে একটি গ্রুপ আইডি নির্দিষ্ট করে একটি গ্রুপ তৈরি করতে পারেন।
এখানে একটি মেনু রিসোর্সের উদাহরণ দেওয়া হলো, যেটিতে একটি গ্রুপ অন্তর্ভুক্ত রয়েছে:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_save" android:icon="@drawable/menu_save" android:title="@string/menu_save" /> <!-- menu group --> <group android:id="@+id/group_delete"> <item android:id="@+id/menu_archive" android:title="@string/menu_archive" /> <item android:id="@+id/menu_delete" android:title="@string/menu_delete" /> </group> </menu>
গ্রুপে থাকা আইটেমগুলো প্রথম আইটেমের সাথে একই লেভেলে প্রদর্শিত হয়—মেনুর তিনটি আইটেমই একে অপরের সহোদর। তবে, আপনি গ্রুপ আইডি উল্লেখ করে এবং পূর্ববর্তী পদ্ধতিগুলো ব্যবহার করে গ্রুপের দুটি আইটেমের বৈশিষ্ট্য পরিবর্তন করতে পারেন। সিস্টেম গ্রুপ করা আইটেমগুলোকে কখনোই আলাদা করে না। উদাহরণস্বরূপ, যদি আপনি প্রতিটি আইটেমের জন্য android:showAsAction="ifRoom" ঘোষণা করেন, তাহলে দুটিই অ্যাকশন বারে অথবা অ্যাকশন ওভারফ্লোতে প্রদর্শিত হবে।
চেকযোগ্য মেনু আইটেম ব্যবহার করুন
একটি মেনু বিভিন্ন অপশন চালু বা বন্ধ করার ইন্টারফেস হিসেবে কার্যকর হতে পারে, যেখানে স্বতন্ত্র অপশনগুলোর জন্য চেকবক্স অথবা পরস্পর বর্জনীয় অপশনগুলোর সমষ্টির জন্য রেডিও বাটন ব্যবহার করা যায়। চিত্র ৫-এ এমন একটি সাবমেনু দেখানো হয়েছে, যার আইটেমগুলো রেডিও বাটনের মাধ্যমে চেক করা যায়।
আপনি <item> এলিমেন্টে android:checkable অ্যাট্রিবিউট ব্যবহার করে স্বতন্ত্র মেনু আইটেমগুলির জন্য, অথবা <group> এলিমেন্টে android:checkableBehavior অ্যাট্রিবিউট ব্যবহার করে সম্পূর্ণ গ্রুপের জন্য চেকেবল আচরণ নির্ধারণ করতে পারেন। উদাহরণস্বরূপ, এই মেনু গ্রুপের সমস্ত আইটেম একটি রেডিও বাটন দিয়ে চেকেবল:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/red" android:title="@string/red" /> <item android:id="@+id/blue" android:title="@string/blue" /> </group> </menu>
android:checkableBehavior অ্যাট্রিবিউটটি নিম্নলিখিতগুলির মধ্যে একটি গ্রহণ করে:
-
single - গ্রুপটি থেকে কেবল একটি আইটেম চেক করা যাবে, যার ফলে রেডিও বাটন তৈরি হবে।
-
all - সমস্ত আইটেম চেক করা গেলে চেকবক্স তৈরি হবে।
-
none - কোনো আইটেম চেক করা যাচ্ছে না।
আপনি <item> এলিমেন্টে android:checked অ্যাট্রিবিউট ব্যবহার করে কোনো আইটেমে ডিফল্ট চেক্ট স্টেট প্রয়োগ করতে পারেন এবং কোডে setChecked() মেথড দিয়ে তা পরিবর্তন করতে পারেন।
যখন কোনো চেকযোগ্য আইটেম নির্বাচন করা হয়, তখন সিস্টেম আপনার সংশ্লিষ্ট আইটেম-নির্বাচিত কলব্যাক মেথডটি কল করে, যেমন onOptionsItemSelected() । এখানেই আপনি চেকবক্সের অবস্থা নির্ধারণ করেন, কারণ একটি চেকবক্স বা রেডিও বাটন স্বয়ংক্রিয়ভাবে তার অবস্থা পরিবর্তন করে না। আপনি isChecked() ব্যবহার করে আইটেমটির বর্তমান অবস্থা—ব্যবহারকারী নির্বাচন করার আগে এটি যেমন ছিল—জানতে পারেন এবং তারপর setChecked() ব্যবহার করে চেক করা অবস্থাটি সেট করতে পারেন। এটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
কোটলিন
override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.vibrate, R.id.dont_vibrate -> { item.isChecked = !item.isChecked true } else -> super.onOptionsItemSelected(item) } }
জাভা
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.vibrate: case R.id.dont_vibrate: if (item.isChecked()) item.setChecked(false); else item.setChecked(true); return true; default: return super.onOptionsItemSelected(item); } }
আপনি যদি এইভাবে চেক্ট স্টেট সেট না করেন, তাহলে ব্যবহারকারী যখন চেকবক্স বা রেডিও বাটনটি নির্বাচন করে, তখন সেটির দৃশ্যমান অবস্থার কোনো পরিবর্তন হয় না। যখন আপনি স্টেটটি সেট করেন, তখন অ্যাক্টিভিটি আইটেমটির চেক্ট স্টেটটি সংরক্ষণ করে রাখে, ফলে ব্যবহারকারী যখন পরে মেনুটি খোলে, তখন আপনার সেট করা চেক্ট স্টেটটিই দৃশ্যমান থাকে।
একটি ইন্টেন্টের উপর ভিত্তি করে মেনু আইটেম যোগ করুন
কখনও কখনও আপনি একটি Intent ব্যবহার করে কোনো মেনু আইটেমের মাধ্যমে একটি অ্যাক্টিভিটি চালু করতে চান, সেটি আপনার নিজের অ্যাপের অ্যাক্টিভিটি হোক বা অন্য কোনো অ্যাপের। যখন আপনি কোন ইন্টেন্টটি ব্যবহার করতে চান তা জানেন এবং আপনার কাছে একটি নির্দিষ্ট মেনু আইটেম থাকে যা ইন্টেন্টটি শুরু করে, তখন আপনি উপযুক্ত on-item-selected কলব্যাক মেথডের সময় startActivity() ব্যবহার করে ইন্টেন্টটি কার্যকর করতে পারেন, যেমন onOptionsItemSelected() কলব্যাক।
তবে, আপনি যদি নিশ্চিত না হন যে ব্যবহারকারীর ডিভাইসে ইন্টেন্টটি পরিচালনা করার মতো কোনো অ্যাপ আছে, তাহলে সেটিকে কল করে এমন একটি মেনু আইটেম যোগ করলে সেটি অকার্যকর হয়ে যেতে পারে, কারণ ইন্টেন্টটি হয়তো কোনো অ্যাক্টিভিটিতে রিজলভ হবে না। এর সমাধান করতে, অ্যান্ড্রয়েড যখন ডিভাইসে আপনার ইন্টেন্টটি পরিচালনা করে এমন অ্যাক্টিভিটি খুঁজে পায়, তখন এটি আপনাকে আপনার মেনুতে ডাইনামিকভাবে আইটেম যোগ করার সুযোগ দেয়।
ইন্টেন্ট গ্রহণকারী উপলব্ধ অ্যাক্টিভিটিগুলোর উপর ভিত্তি করে মেনু আইটেম যোগ করতে, নিম্নলিখিতগুলি করুন:
-
CATEGORY_ALTERNATIVEবাCATEGORY_SELECTED_ALTERNATIVE, অথবা উভয় ক্যাটাগরি এবং অন্য যেকোনো প্রয়োজনীয়তা সহ একটি ইন্টেন্ট সংজ্ঞায়িত করুন। -
Menu.addIntentOptions()কল করুন। এরপর অ্যান্ড্রয়েড ইন্টেন্টটি সম্পাদন করতে পারে এমন অ্যাপগুলো খুঁজে বের করে এবং সেগুলোকে আপনার মেনুতে যুক্ত করে।
যদি উদ্দেশ্য পূরণ করে এমন কোনো অ্যাপ ইনস্টল করা না থাকে, তাহলে কোনো মেনু আইটেম যোগ করা হয় না।
নিম্নলিখিত উদাহরণে এটি দেখানো হয়েছে:
কোটলিন
override fun onCreateOptionsMenu(menu: Menu): Boolean { super.onCreateOptionsMenu(menu) // Create an Intent that describes the requirements to fulfill, to be // included in the menu. The offering app must include a category value // of Intent.CATEGORY_ALTERNATIVE. val intent = Intent(null, dataUri).apply { addCategory(Intent.CATEGORY_ALTERNATIVE) } // Search and populate the menu with acceptable offering apps. menu.addIntentOptions( R.id.intent_group, // Menu group to which new items are added. 0, // Unique item ID (none). 0, // Order for the items (none). this.componentName, // The current activity name. null, // Specific items to place first (none). intent, // Intent created above that describes the requirements. 0, // Additional flags to control items (none). null) // Array of MenuItems that correlate to specific items (none). return true }
জাভা
@Override public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); // Create an Intent that describes the requirements to fulfill, to be // included in the menu. The offering app must include a category value // of Intent.CATEGORY_ALTERNATIVE. Intent intent = new Intent(null, dataUri); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); // Search and populate the menu with acceptable offering apps. menu.addIntentOptions( R.id.intent_group, // Menu group to which new items are added. 0, // Unique item ID (none). 0, // Order for the items (none). this.getComponentName(), // The current activity name. null, // Specific items to place first (none). intent, // Intent created above that describes the requirements. 0, // Additional flags to control items (none). null); // Array of MenuItems that correlate to specific items (none). return true; }
সংজ্ঞায়িত ইন্টেন্টের সাথে মেলে এমন ইন্টেন্ট ফিল্টার প্রদানকারী প্রতিটি অ্যাক্টিভিটির জন্য একটি মেনু আইটেম যোগ করা হয়। এক্ষেত্রে ইন্টেন্ট ফিল্টারের android:label এর মানটিকে মেনু আইটেমের শিরোনাম এবং অ্যাপ আইকনটিকে মেনু আইটেমের আইকন হিসেবে ব্যবহার করা হয়। addIntentOptions() মেথডটি যোগ করা মেনু আইটেমের সংখ্যা রিটার্ন করে।
আপনার কার্যকলাপ অন্যান্য মেনুতে যুক্ত করা হোক।
আপনি আপনার কার্যকলাপের পরিষেবাগুলো অন্যান্য অ্যাপকে দিতে পারেন, যাতে আপনার অ্যাপটি অন্যদের মেনুতে অন্তর্ভুক্ত হতে পারে—এভাবে পূর্বে বর্ণিত ভূমিকাগুলো উল্টে যায়।
অন্যান্য অ্যাপ মেনুতে অন্তর্ভুক্ত হওয়ার জন্য, যথারীতি একটি ইন্টেন্ট ফিল্টার নির্ধারণ করুন, কিন্তু ইন্টেন্ট ফিল্টার ক্যাটাগরির জন্য CATEGORY_ALTERNATIVE বা CATEGORY_SELECTED_ALTERNATIVE ভ্যালু, অথবা উভয়ই অন্তর্ভুক্ত করুন। এটি নিম্নলিখিত উদাহরণে দেখানো হয়েছে:
<intent-filter label="@string/resize_image"> ... <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> ... </intent-filter>
ইনটেন্ট এবং ইনটেন্ট ফিল্টার অংশে ইনটেন্ট ফিল্টার লেখা সম্পর্কে আরও পড়ুন।
