অ্যাকশন ভিউ ও অ্যাকশন প্রোভাইডার ব্যবহার করা

Compose-এর মাধ্যমে চেষ্টা করুন
Jetpack Compose হল Android-এর জন্য সাজেস্ট করা UI টুলকিট। Compose-এ কীভাবে কম্পোনেন্ট যোগ করতে হয় তা জানুন।

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

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

AndroidX বেশ কিছু বিশেষ অ্যাকশন ভিউ এবং অ্যাকশন প্রোভাইডার উইজেট প্রদান করে। যেমন, SearchView উইজেট সার্চ কোয়েরি লেখার জন্য অ্যাকশন ভিউ প্রয়োগ করে। ShareActionProvider উইজেট অন্যান্য অ্যাপের সাথে তথ্য শেয়ার করার জন্য একটি অ্যাকশন প্রোভাইডার প্রয়োগ করে। এছাড়াও, আপনি নিজের অ্যাকশন ভিউ এবং অ্যাকশন প্রোভাইডার সংজ্ঞায়িত করতে পারেন।

অ্যাকশন ভিউ যোগ করুন

অ্যাকশন ভিউ যোগ করতে, টুলবারের মেনু রিসোর্সে একটি <item> এলিমেন্ট তৈরি করুন, যেমনটি অ্যাকশন যোগ ও ম্যানেজ করুন-এ বর্ণনা করা হয়েছে। <item> এলিমেন্টে নিম্নলিখিত অ্যাট্রিবিউটের মধ্যে যেকোনও একটি যোগ করুন:

  • actionViewClass: অ্যাকশন প্রয়োগ করে এমন উইজেটের ক্লাস
  • actionLayout: অ্যাকশনের কম্পোনেন্ট বর্ণনা করে এমন লেআউট রিসোর্স

showAsAction অ্যাট্রিবিউট "ifRoom|collapseActionView" বা "never|collapseActionView" হিসেবে সেট করুন। ব্যবহারকারী উইজেটের সাথে ইন্টার‍্যাক্ট না করলে, সেটি কীভাবে দেখাতে হবে তা collapseActionView ফ্ল্যাগ থেকে বোঝা যায়। উইজেটটি অ্যাপ বারে থাকলে, অ্যাপটি উইজেটটিকে একটি আইকন হিসেবে দেখায়। উইজেটটি ওভারফ্লো মেনুতে থাকলে, অ্যাপটি উইজেটটিকে একটি মেনু আইটেম হিসেবে দেখায়। ব্যবহারকারী অ্যাকশন ভিউয়ের সাথে ইন্টার‍্যাক্ট করলে, এটি বড় হয়ে অ্যাপ বার পূরণ করে।

যেমন, নিম্নলিখিত কোড অ্যাপ বারে SearchView উইজেট যোগ করে:

<item android:id="@+id/action_search"
     android:title="@string/action_search"
     android:icon="@drawable/ic_search"
     app:showAsAction="ifRoom|collapseActionView"
     app:actionViewClass="androidx.appcompat.widget.SearchView" />

ব্যবহারকারী উইজেটের সাথে ইন্টার‍্যাক্ট না করলে, অ্যাপটি android:icon-এর মাধ্যমে নির্দিষ্ট করা আইকন হিসেবে উইজেটটি দেখায়। অ্যাপ বারে জায়গা না থাকলে, অ্যাপটি ওভারফ্লো মেনুতে অ্যাকশন যোগ করে।

সার্চ বারের শুরুতে ও শেষে আইকন সহ একটি ছবি।
ছবি ১. প্রথমে ও শেষে আইকন সহ সার্চ বার।

ব্যবহারকারী আইকন বা মেনু আইটেমে ট্যাপ করলে, উইজেটটি বড় হয়ে টুলবারটি পূরণ করে, যাতে ব্যবহারকারী এটির সাথে ইন্টার‍্যাক্ট করতে পারেন।

সার্চ বারে ফোকাস করার পরে সার্চ ভিউ খোলা হয়েছে তা এই ছবিতে দেখানো হয়েছে।
ছবি ২. সার্চ বারে ফোকাস করা হলে সার্চ ভিউ খুলে যায়।

আপনাকে অ্যাকশন কনফিগার করতে হলে, আপনার অ্যাক্টিভিটির onCreateOptionsMenu() কলব্যাকে তা করুন। আপনি getActionView() মেথড কল করে অ্যাকশন ভিউয়ের অবজেক্ট রেফারেন্স পেতে পারেন। যেমন, নিম্নলিখিত কোডটি আগের কোডের উদাহরণে সংজ্ঞায়িত SearchView উইজেটের জন্য অবজেক্ট রেফারেন্স পায়:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.main_activity_actions, menu)

    val searchItem = menu?.findItem(R.id.action_search)
    val searchView = searchItem?.actionView as SearchView

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu)
}

জাভা

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView =
            (SearchView) searchItem.getActionView();

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu);
}

অ্যাকশন ভিউ এক্সপ্যানশনে উত্তর দিন

অ্যাকশনের <item> এলিমেন্টে collapseActionView ফ্ল্যাগ থাকলে, ব্যবহারকারী অ্যাকশন ভিউয়ের সাথে ইন্টার‍্যাক্ট না করা পর্যন্ত অ্যাপটি অ্যাকশন ভিউকে আইকন হিসেবে দেখায়। ব্যবহারকারী আইকনে ট্যাপ করলে, onOptionsItemSelected()-এর জন্য বিল্ট-ইন হ্যান্ডলার অ্যাকশন ভিউ বড় করে। আপনার অ্যাক্টিভিটি সাবক্লাস যদি onOptionsItemSelected() পদ্ধতি ওভাররাইড করে, তাহলে আপনার ওভাররাইড পদ্ধতিকে অবশ্যই super.onOptionsItemSelected() কল করতে হবে যাতে সুপারক্লাস অ্যাকশন ভিউ প্রসারিত করতে পারে।

অ্যাকশন বড় বা ছোট করার সময় আপনি কিছু করতে চাইলে, এমন একটি ক্লাস নির্ধারণ করতে পারেন যা MenuItem.OnActionExpandListener ইমপ্লিমেন্ট করে এবং সেই ক্লাসের কোনও মেম্বারকে setOnActionExpandListener()-এ পাস করে। যেমন, অ্যাকশন ভিউ বড় বা ছোট করা হয়েছে কিনা তার উপর ভিত্তি করে আপনি অ্যাক্টিভিটি আপডেট করতে চাইতে পারেন। নিম্নলিখিত কোড স্নিপেট থেকে জানা যায় যে কীভাবে লিসেনারকে সংজ্ঞায়িত ও পাস করতে হয়:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.options, menu)

    // Define the listener.
    val expandListener = object : MenuItem.OnActionExpandListener {
        override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
            // Do something when the action item collapses.
            return true // Return true to collapse the action view.
        }

        override fun onMenuItemActionExpand(item: MenuItem): Boolean {
            // Do something when it expands.
            return true // Return true to expand the action view.
        }
    }

    // Get the MenuItem for the action item.
    val actionMenuItem = menu?.findItem(R.id.myActionItem)

    // Assign the listener to that action item.
    actionMenuItem?.setOnActionExpandListener(expandListener)

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true
}

জাভা

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);

    // Define the listener.
    OnActionExpandListener expandListener = new OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when the action item collapses.
            return true;  // Return true to collapse action view.
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Do something when it expands.
            return true;  // Return true to expand the action view.
        }
    };

    // Get the MenuItem for the action item.
    MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);

    // Assign the listener to that action item.
    MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true;
}

অ্যাকশন প্রদানকারী যোগ করুন

অ্যাকশন প্রোভাইডার ঘোষণা করতে, টুলবারের মেনু রিসোর্সে একটি <item> এলিমেন্ট তৈরি করুন, যেমনটি অ্যাকশন যোগ ও ম্যানেজ করুন-এ বর্ণনা করা হয়েছে। একটি actionProviderClass অ্যাট্রিবিউট যোগ করুন এবং অ্যাকশন প্রোভাইডার ক্লাসের জন্য সম্পূর্ণভাবে উপযুক্ত ক্লাস নেমে এটি সেট করুন।

যেমন, নিম্নলিখিত কোডটি একটি ShareActionProvider ঘোষণা করে, যা AndroidX লাইব্রেরিতে সংজ্ঞায়িত একটি উইজেট যা আপনার অ্যাপকে অন্যান্য অ্যাপের সাথে ডেটা শেয়ার করতে দেয়:

<item android:id="@+id/action_share"
    android:title="@string/share"
    app:showAsAction="ifRoom"
    app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>

এই ক্ষেত্রে, উইজেটের জন্য একটি আইকন ঘোষণা করার প্রয়োজন নেই, কারণ ShareActionProvider নিজস্ব গ্রাফিক্স প্রদান করে। আপনি কাস্টম অ্যাকশন ব্যবহার করলে, আইকন ঘোষণা করুন।

অতিরিক্ত রিসোর্স

  • আপনার অ্যাপের উপরের বারে শেয়ার অ্যাকশন যোগ করার উদাহরণ দেখতে ShareActionProvider দেখুন।
  • কাস্টম অ্যাকশন প্রোভাইডার তৈরি করার ব্যাপারে আরও তথ্য পেতে ActionProvider দেখুন।