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

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

একটি চিত্র যা একটি অগ্রণী এবং পিছনের আইকন সহ একটি অনুসন্ধান বার দেখাচ্ছে৷
চিত্র 1. অগ্রণী এবং পিছনের আইকন সহ অনুসন্ধান বার।

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

অনুসন্ধান বার ফোকাস করা হলে একটি অনুসন্ধান দৃশ্য খোলা দেখানো একটি চিত্র৷
চিত্র 2. অনুসন্ধান বার ফোকাস করা হলে অনুসন্ধান দৃশ্য খোলে।

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

কোটলিন

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() -এ পাস করে। উদাহরণস্বরূপ, আপনি একটি অ্যাকশন ভিউ প্রসারিত বা ভেঙে পড়েছে তার উপর ভিত্তি করে কার্যকলাপ আপডেট করতে চাইতে পারেন। নিম্নলিখিত কোড স্নিপেট দেখায় কিভাবে একজন শ্রোতাকে সংজ্ঞায়িত এবং পাস করতে হয়:

কোটলিন

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 দেখুন।