মেনু যোগ করুন

রচনা পদ্ধতি চেষ্টা করুন
জেটপ্যাক কম্পোজ হল Android এর জন্য প্রস্তাবিত UI টুলকিট। কম্পোজে উপাদান যোগ করতে শিখুন।

মেনু হল অনেক ধরনের অ্যাপের একটি সাধারণ ইউজার ইন্টারফেস উপাদান। একটি পরিচিত এবং সামঞ্জস্যপূর্ণ ব্যবহারকারীর অভিজ্ঞতা প্রদান করতে, আপনার কার্যকলাপে ব্যবহারকারীর ক্রিয়া এবং অন্যান্য বিকল্পগুলি উপস্থাপন করতে Menu API ব্যবহার করুন৷

ওভারফ্লো মেনুর উদাহরণ দেখানো একটি চিত্র
চিত্র 1. একটি আইকন ট্যাপ দ্বারা ট্রিগার করা একটি মেনু, ওভারফ্লো মেনু আইকনের নীচে প্রদর্শিত হচ্ছে।

এই দস্তাবেজটি দেখায় যে কীভাবে অ্যান্ড্রয়েডের সমস্ত সংস্করণে তিনটি মৌলিক ধরণের মেনু বা অ্যাকশন উপস্থাপনা তৈরি করতে হয়:

অপশন মেনু এবং অ্যাপ বার
বিকল্প মেনু হল একটি কার্যকলাপের জন্য মেনু আইটেমগুলির প্রাথমিক সংগ্রহ। এটি যেখানে আপনি অ্যাপ্লিকেশানে বিশ্বব্যাপী প্রভাব ফেলে এমন অ্যাকশনগুলি রাখেন, যেমন "অনুসন্ধান," "ইমেল রচনা করুন" এবং "সেটিংস"৷

একটি বিকল্প মেনু তৈরি করুন বিভাগটি দেখুন।

প্রসঙ্গ মেনু এবং প্রাসঙ্গিক অ্যাকশন মোড
একটি প্রসঙ্গ মেনু হল একটি ভাসমান মেনু যা প্রদর্শিত হয় যখন ব্যবহারকারী একটি উপাদানকে স্পর্শ করে ধরে রাখে। এটি এমন কাজ প্রদান করে যা নির্বাচিত বিষয়বস্তু বা প্রসঙ্গ ফ্রেমকে প্রভাবিত করে।

প্রাসঙ্গিক অ্যাকশন মোড অ্যাকশন আইটেমগুলি প্রদর্শন করে যা স্ক্রিনের শীর্ষে একটি বারে নির্বাচিত সামগ্রীকে প্রভাবিত করে এবং ব্যবহারকারীকে একাধিক আইটেম নির্বাচন করতে দেয়।

একটি প্রাসঙ্গিক মেনু তৈরি করুন বিভাগটি দেখুন।

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

একটি পপআপ মেনু তৈরি করুন বিভাগটি দেখুন।

XML-এ একটি মেনু সংজ্ঞায়িত করুন

সমস্ত মেনু প্রকারের জন্য, Android মেনু আইটেমগুলিকে সংজ্ঞায়িত করার জন্য একটি মানক 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
কখন এবং কীভাবে এই আইটেমটি অ্যাপ বারে একটি অ্যাকশন আইটেম হিসাবে প্রদর্শিত হবে তার স্পেসিফিকেশন।

এইগুলি আপনার ব্যবহার করা সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য, তবে আরও অনেকগুলি উপলব্ধ রয়েছে৷ সমস্ত সমর্থিত বৈশিষ্ট্য সম্পর্কে তথ্যের জন্য, মেনু সংস্থান ডকুমেন্টেশন দেখুন।

আপনি যেকোন মেনুতে একটি আইটেমের সাথে একটি সাবমেনু যোগ করতে পারেন একটি <menu> উপাদান একটি <item> এর চাইল্ড হিসেবে যোগ করে। সাবমেনুগুলি উপযোগী হয় যখন আপনার অ্যাপের অনেকগুলি ফাংশন থাকে যা বিষয়গুলিতে সংগঠিত করা যেতে পারে, যেমন একটি PC অ্যাপের মেনু বারে থাকা আইটেমগুলি—যেমন ফাইল , সম্পাদনা , এবং দেখুন ৷ নিম্নলিখিত উদাহরণ দেখুন:

<?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_ করুন। নিম্নলিখিত বিভাগগুলি দেখায় কিভাবে প্রতিটি মেনু টাইপের জন্য একটি মেনু ফুলাতে হয়।

একটি বিকল্প মেনু তৈরি করুন

বিকল্প মেনু, চিত্র 1-এ দেখানো একটির মতো, যেখানে আপনি ক্রিয়াকলাপ এবং অন্যান্য বিকল্পগুলি অন্তর্ভুক্ত করেন যা বর্তমান কার্যকলাপের প্রসঙ্গে প্রাসঙ্গিক, যেমন "অনুসন্ধান," "ইমেল রচনা করুন" এবং "সেটিংস"৷

Google Sheets অ্যাপের জন্য অ্যাপ বার দেখানো একটি ছবি
চিত্র 2. গুগল শীট অ্যাপ, অ্যাকশন ওভারফ্লো বোতাম সহ বেশ কয়েকটি বোতাম দেখাচ্ছে।

আপনি আপনার Activity সাবক্লাস বা একটি Fragment সাবক্লাস থেকে বিকল্প মেনুর জন্য আইটেম ঘোষণা করতে পারেন। যদি আপনার কার্যকলাপ এবং আপনার টুকরা উভয়ই বিকল্প মেনুর জন্য আইটেম ঘোষণা করে, তাহলে আইটেমগুলি UI-তে একত্রিত হয়। ক্রিয়াকলাপের আইটেমগুলি প্রথমে প্রদর্শিত হয়, তারপরে প্রতিটি খণ্ডের দ্বারা অনুসরণ করা হয়, যে ক্রমে খণ্ডগুলি কার্যকলাপে যোগ করা হয়। প্রয়োজনে, আপনি প্রতিটি <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() ব্যবহার করে মেনু আইটেম যোগ করতে পারেন এবং findItem() দিয়ে আইটেমগুলি পুনরুদ্ধার করতে পারেন যাতে MenuItem API-এর সাথে তাদের বৈশিষ্ট্যগুলি সংশোধন করতে পারেন।

ক্লিক ইভেন্টগুলি পরিচালনা করুন

যখন ব্যবহারকারী অ্যাপ বারে অ্যাকশন আইটেম সহ বিকল্প মেনু থেকে একটি আইটেম নির্বাচন করেন, তখন সিস্টেমটি আপনার কার্যকলাপের 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() এর সুপারক্লাস বাস্তবায়নে কল করুন। ডিফল্ট বাস্তবায়ন মিথ্যা প্রদান করে।

আপনার অ্যাক্টিভিটি যদি টুকরোগুলি অন্তর্ভুক্ত করে, সিস্টেমটি প্রথমে ক্রিয়াকলাপের জন্য onOptionsItemSelected() কল করে, তারপর প্রতিটি খণ্ডের জন্য ক্রমানুসারে টুকরোগুলি যোগ করা হয়, যতক্ষণ না একটি true ফিরে আসে বা সমস্ত খণ্ড কল করা হয়।

রানটাইমে মেনু আইটেম পরিবর্তন করুন

সিস্টেমটি onCreateOptionsMenu() কল করার পরে, এটি আপনার তৈরি করা Menu একটি দৃষ্টান্ত বজায় রাখে এবং মেনুটি অবৈধ না হওয়া পর্যন্ত পুনরায় onCreateOptionsMenu() কল করে না। যাইহোক, শুধুমাত্র প্রাথমিক মেনু অবস্থা তৈরি করতে onCreateOptionsMenu() ব্যবহার করুন এবং কার্যকলাপের জীবনচক্রের সময় পরিবর্তন না করার জন্য।

আপনি যদি কার্যকলাপের জীবনচক্রের সময় ঘটে যাওয়া ইভেন্টগুলির উপর ভিত্তি করে বিকল্প মেনু পরিবর্তন করতে চান, তাহলে আপনি onPrepareOptionsMenu() পদ্ধতিতে তা করতে পারেন। এই পদ্ধতিটি আপনাকে Menu অবজেক্টটি পাস করে যেমন এটি বর্তমানে বিদ্যমান তাই আপনি এটিকে সংশোধন করতে পারেন, যেমন আইটেমগুলি যোগ, অপসারণ বা নিষ্ক্রিয় করে। ফ্র্যাগমেন্ট একটি onPrepareOptionsMenu() কলব্যাক প্রদান করে।

অ্যাপ বারে মেনু আইটেমগুলি উপস্থাপিত হলে বিকল্প মেনুটি সর্বদা খোলা বলে মনে করা হয়। যখন একটি ইভেন্ট ঘটে এবং আপনি একটি মেনু আপডেট করতে চান, তখন invalidateOptionsMenu() কে কল করুন যাতে সিস্টেমটি onPrepareOptionsMenu() কল করার অনুরোধ জানায়।

একটি প্রাসঙ্গিক মেনু তৈরি করুন

একটি ছবি একটি ভাসমান প্রসঙ্গ মেনু দেখাচ্ছে৷
চিত্র 3. একটি ভাসমান প্রসঙ্গ মেনু।

একটি প্রাসঙ্গিক মেনু এমন ক্রিয়াগুলি অফার করে যা UI-তে একটি নির্দিষ্ট আইটেম বা প্রসঙ্গ ফ্রেমকে প্রভাবিত করে। আপনি যেকোনো দৃশ্যের জন্য একটি প্রসঙ্গ মেনু প্রদান করতে পারেন, তবে সেগুলি প্রায়শই একটি RecylerView বা অন্যান্য ভিউ সংগ্রহের আইটেমগুলির জন্য ব্যবহৃত হয় যেখানে ব্যবহারকারী প্রতিটি আইটেমের উপর সরাসরি ক্রিয়া সম্পাদন করতে পারে।

প্রাসঙ্গিক কর্ম প্রদান করার দুটি উপায় আছে:

  • একটি ভাসমান প্রসঙ্গ মেনুতে । একটি মেনু একটি মেনু আইটেমগুলির একটি ভাসমান তালিকা হিসাবে উপস্থিত হয়, একটি ডায়ালগের অনুরূপ, যখন ব্যবহারকারী একটি প্রসঙ্গ মেনুর জন্য সমর্থন ঘোষণা করে এমন একটি দৃশ্যে একটি স্পর্শ করুন এবং ধরে রাখুন৷ ব্যবহারকারীরা একটি সময়ে একটি আইটেম একটি প্রাসঙ্গিক কর্ম সঞ্চালন করতে পারেন.
  • প্রাসঙ্গিক কর্ম মোডে . এই মোডটি ActionMode এর একটি সিস্টেম বাস্তবায়ন যা একটি প্রাসঙ্গিক অ্যাকশন বার বা CAB প্রদর্শন করে, যেটি নির্বাচিত আইটেম(গুলি) কে প্রভাবিত করে এমন অ্যাকশন আইটেম সহ স্ক্রিনের শীর্ষে। যখন এই মোড সক্রিয় থাকে, ব্যবহারকারীরা একসাথে একাধিক আইটেমের উপর একটি ক্রিয়া সম্পাদন করতে পারে, যদি আপনার অ্যাপ এটি সমর্থন করে।

দ্রষ্টব্য: প্রসঙ্গ মেনু আইটেম শর্টকাট এবং আইটেম আইকন সমর্থন করে না।

একটি ভাসমান প্রসঙ্গ মেনু তৈরি করুন

একটি ভাসমান প্রসঙ্গ মেনু প্রদান করতে, নিম্নলিখিতগুলি করুন:

  1. registerForContextMenu() কল করে এবং View পাস করে প্রসঙ্গ মেনুটির সাথে যুক্ত View নিবন্ধন করুন।

    যদি আপনার কার্যকলাপ একটি RecyclerView ব্যবহার করে এবং আপনি প্রতিটি আইটেমকে একই প্রসঙ্গ মেনু প্রদান করতে চান, registerForContextMenu()RecyclerView পাস করে একটি প্রসঙ্গ মেনুর জন্য সমস্ত আইটেম নিবন্ধন করুন।

  2. আপনার 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 অবজেক্ট অন্তর্ভুক্ত থাকে যা নির্বাচিত আইটেম সম্পর্কে অতিরিক্ত তথ্য প্রদান করে। যদি আপনার কার্যকলাপের বেশ কয়েকটি ভিউ থাকে যা প্রতিটি একটি ভিন্ন প্রসঙ্গ মেনু প্রদান করে, তাহলে আপনি এই পরামিতিগুলি ব্যবহার করতে পারেন কোন প্রসঙ্গ মেনুটি স্ফীত হবে তা নির্ধারণ করতে।

  3. 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() পদ্ধতিটি নির্বাচিত মেনু আইটেমের জন্য আইডি জিজ্ঞাসা করে, যেটি আপনি android:id বৈশিষ্ট্য ব্যবহার করে XML-এর প্রতিটি মেনু আইটেমকে বরাদ্দ করেন, যেমনটি XML-এ একটি মেনু নির্ধারণ করুন -এ দেখানো হয়েছে।

    আপনি যখন সফলভাবে একটি মেনু আইটেম পরিচালনা করেন, true ফিরে যান। আপনি যদি মেনু আইটেমটি পরিচালনা না করেন, তাহলে সুপারক্লাস বাস্তবায়নে মেনু আইটেমটি পাস করুন। যদি আপনার ক্রিয়াকলাপে অংশগুলি অন্তর্ভুক্ত থাকে তবে কার্যকলাপটি প্রথমে এই কলব্যাকটি গ্রহণ করে৷ আন-হ্যান্ডেল করা হলে সুপারক্লাসকে কল করার মাধ্যমে, সিস্টেমটি ইভেন্টটিকে প্রতিটি খণ্ডে সংশ্লিষ্ট কলব্যাক পদ্ধতিতে প্রেরণ করে, এক সময়ে, প্রতিটি খণ্ডটি যুক্ত করা হয়, যতক্ষণ না true বা false ফেরত না আসে। Activity এবং android.app.Fragment এর জন্য ডিফল্ট বাস্তবায়ন false রিটার্ন, তাই আন-হ্যান্ডেল করা অবস্থায় সর্বদা সুপারক্লাস কল করুন।

প্রাসঙ্গিক কর্ম মোড ব্যবহার করুন

প্রাসঙ্গিক অ্যাকশন মোড হল ActionMode একটি সিস্টেম বাস্তবায়ন যা প্রাসঙ্গিক ক্রিয়া সম্পাদনের দিকে ব্যবহারকারীর মিথস্ক্রিয়াকে ফোকাস করে। যখন একজন ব্যবহারকারী একটি আইটেম নির্বাচন করে এই মোডটি সক্ষম করে, তখন নির্বাচিত আইটেমগুলিতে ব্যবহারকারীর সম্পাদনা করতে পারে এমন ক্রিয়াগুলি উপস্থাপন করতে পর্দার শীর্ষে একটি প্রাসঙ্গিক অ্যাকশন বার প্রদর্শিত হয়৷ এই মোডটি সক্ষম থাকাকালীন, ব্যবহারকারী একাধিক আইটেম নির্বাচন করতে পারে, যদি আপনার অ্যাপ এটি সমর্থন করে এবং আইটেমগুলিকে অনির্বাচন করতে পারে এবং কার্যকলাপের মধ্যে নেভিগেট করা চালিয়ে যেতে পারে৷ অ্যাকশন মোড অক্ষম করা হয় এবং ব্যবহারকারী যখন সমস্ত আইটেম অনির্বাচন করে, ব্যাক বোতামে ট্যাপ করে, বা বারের বাম দিকে সম্পন্ন অ্যাকশনে ট্যাপ করে তখন প্রাসঙ্গিক অ্যাকশন বারটি অদৃশ্য হয়ে যায়।

প্রাসঙ্গিক ক্রিয়াগুলি প্রদান করে এমন দৃশ্যগুলির জন্য, যখন এই দুটি ঘটনাগুলির একটি বা উভয়টি ঘটে তখন আপনি সাধারণত প্রাসঙ্গিক অ্যাকশন মোড চালু করেন:

  • ব্যবহারকারী ভিউতে একটি স্পর্শ এবং ধরে রাখে।
  • ব্যবহারকারী ভিউয়ের মধ্যে একটি চেকবক্স বা অনুরূপ UI উপাদান নির্বাচন করে।

আপনার অ্যাপ কীভাবে প্রাসঙ্গিক অ্যাকশন মোডকে আহ্বান করে এবং প্রতিটি অ্যাকশনের আচরণকে সংজ্ঞায়িত করে তা আপনার ডিজাইনের উপর নির্ভর করে। দুটি ডিজাইন আছে:

  • ব্যক্তিগত, নির্বিচারে দৃষ্টিভঙ্গির উপর প্রাসঙ্গিক কর্মের জন্য।
  • একটি RecyclerView এ আইটেমগুলির গোষ্ঠীতে ব্যাচের প্রাসঙ্গিক ক্রিয়াগুলির জন্য, ব্যবহারকারীকে একাধিক আইটেম নির্বাচন করতে এবং সেগুলির উপর একটি ক্রিয়া সম্পাদন করতে দেয়৷

নিম্নলিখিত বিভাগগুলি প্রতিটি দৃশ্যের জন্য প্রয়োজনীয় সেটআপ বর্ণনা করে।

পৃথক ভিউয়ের জন্য প্রাসঙ্গিক অ্যাকশন মোড সক্ষম করুন

ব্যবহারকারী নির্দিষ্ট ভিউ নির্বাচন করলেই আপনি যদি প্রাসঙ্গিক অ্যাকশন মোড চালু করতে চান, তাহলে নিম্নলিখিতগুলি করুন:

  1. নিম্নলিখিত উদাহরণে দেখানো হিসাবে 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-তে বিভিন্ন পরিবর্তন করতে ActionMode API ব্যবহার করতে পারেন, যেমন setTitle() এবং setSubtitle() দিয়ে শিরোনাম এবং সাবটাইটেল সংশোধন করা, যা কতগুলি আইটেম নির্বাচন করা হয়েছে তা নির্দেশ করতে কার্যকর।

    পূর্ববর্তী নমুনা অ্যাকশন মোডটি ধ্বংস হয়ে গেলে actionMode ভেরিয়েবলটিকে null সেট করে। পরবর্তী ধাপে, এটি কীভাবে শুরু করা হয়েছে এবং আপনার কার্যকলাপ বা খণ্ডে সদস্য ভেরিয়েবল কীভাবে সংরক্ষণ করা কার্যকর হতে পারে তা দেখুন।

  2. আপনি যখন বারটি দেখাতে চান তখন 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 ফেরত দেয়। সদস্য ভেরিয়েবলে এটি সংরক্ষণ করে, আপনি অন্যান্য ইভেন্টের প্রতিক্রিয়া হিসাবে প্রাসঙ্গিক অ্যাকশন বারে পরিবর্তন করতে পারেন। পূর্ববর্তী নমুনায়, অ্যাকশন মোডটি ActionMode মোড শুরু করার আগে সদস্যটি শূন্য কিনা তা পরীক্ষা করে, ActionMode ইন্সট্যান্সটি ইতিমধ্যে সক্রিয় থাকলে তা পুনরায় তৈরি করা হয়নি তা নিশ্চিত করতে ব্যবহার করা হয়।

একটি পপআপ মেনু তৈরি করুন

উপরের-ডানদিকে ওভারফ্লো বোতামে নোঙর করা Gmail অ্যাপে একটি পপআপ মেনু দেখানো একটি চিত্র।
চিত্র 4. Gmail অ্যাপে একটি পপআপ মেনু, উপরের-ডানদিকের কোণায় ওভারফ্লো বোতামে নোঙর করা।

একটি PopupMenu হল একটি মডেল মেনু যা একটি View নোঙর করা হয়। রুম থাকলে এটি অ্যাঙ্কর ভিউয়ের নীচে প্রদর্শিত হয়, অথবা অন্যথায় ভিউয়ের উপরে। এটি নিম্নলিখিত জন্য দরকারী:

  • নির্দিষ্ট বিষয়বস্তুর সাথে সম্পর্কিত ক্রিয়াগুলির জন্য একটি ওভারফ্লো-স্টাইল মেনু প্রদান করা, যেমন Gmail এর ইমেল শিরোনাম, চিত্র 4 এ দেখানো হয়েছে।
  • একটি কমান্ড বাক্যের দ্বিতীয় অংশ প্রদান করা, যেমন যোগ চিহ্নিত একটি বোতাম যা বিভিন্ন যোগ বিকল্প সহ একটি পপআপ মেনু তৈরি করে।
  • Spinner মতো একটি মেনু প্রদান করা যা একটি স্থায়ী নির্বাচন ধরে রাখে না।

আপনি যদি XML-এ আপনার মেনু সংজ্ঞায়িত করেন , তাহলে এখানে আপনি কীভাবে পপআপ মেনু দেখাতে পারেন:

  1. একটি PopupMenu এর কনস্ট্রাক্টর দিয়ে ইনস্ট্যান্টিয়েট করুন, যা বর্তমান অ্যাপের Context এবং যে View মেনুটি নোঙর করা হয়েছে তা নেয়।
  2. PopupMenu.getMenu() দ্বারা প্রত্যাবর্তিত Menu অবজেক্টে আপনার মেনু সংস্থান বৃদ্ধি করতে MenuInflater ব্যবহার করুন।
  3. 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" ঘোষণা করেন, সেগুলি উভয়ই অ্যাকশন বারে উপস্থিত হয় বা উভয়ই অ্যাকশন ওভারফ্লোতে উপস্থিত হয়৷

চেকযোগ্য মেনু আইটেম ব্যবহার করুন

চিত্র 5. পরীক্ষাযোগ্য আইটেম সহ একটি সাবমেনু।

একটি মেনু বিকল্পগুলি চালু এবং বন্ধ করার জন্য একটি ইন্টারফেস হিসাবে কার্যকর হতে পারে, স্বতন্ত্র বিকল্পগুলির জন্য একটি চেকবক্স ব্যবহার করে, বা পারস্পরিক একচেটিয়া বিকল্পগুলির গ্রুপগুলির জন্য রেডিও বোতামগুলি ব্যবহার করে৷ চিত্র 5 রেডিও বোতামগুলির সাথে পরীক্ষাযোগ্য আইটেমগুলির সাথে একটি সাবমেনু দেখায়৷

আপনি <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 ব্যবহার করে একটি কার্যকলাপ চালু করতে চান, তা আপনার অ্যাপ্লিকেশন বা অন্য অ্যাপ্লিকেশনের একটি কার্যকলাপ হোক না কেন৷ আপনি যে অভিপ্রায়টি ব্যবহার করতে চান তা জানলে এবং একটি নির্দিষ্ট মেনু আইটেম থাকে যা অভিপ্রায় শুরু করে, আপনি উপযুক্ত অন-আইটেম-নির্বাচিত কলব্যাক পদ্ধতির সময়, যেমন onOptionsItemSelected() কলব্যাকের সময় startActivity() দিয়ে অভিপ্রায়টি কার্যকর করতে পারেন৷

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

একটি অভিপ্রায় স্বীকার করে এমন উপলব্ধ কার্যকলাপের উপর ভিত্তি করে মেনু আইটেম যোগ করতে, নিম্নলিখিতগুলি করুন:

  1. CATEGORY_ALTERNATIVE বা CATEGORY_SELECTED_ALTERNATIVE , অথবা উভয়ই, এবং অন্যান্য প্রয়োজনীয়তার সাথে একটি অভিপ্রায় সংজ্ঞায়িত করুন৷
  2. 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>

ইন্টেন্ট এবং ইনটেন্ট ফিল্টারে ইন্টেন্ট ফিল্টার লেখা সম্পর্কে আরও পড়ুন।