অ্যাকশন যোগ ও ম্যানেজ করা

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

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

অ্যাপ বারে স্পেস সীমিত। অ্যাপ বারে যতগুলি অ্যাকশন দেখানো সম্ভব, কোনও অ্যাপ তার চেয়ে বেশি অ্যাকশন ঘোষণা করলে, অ্যাপ বার অতিরিক্ত অ্যাকশনগুলি একটি ওভারফ্লো মেনুতে পাঠিয়ে দেয়। অ্যাপটি এটিও নির্দিষ্ট করতে পারে যে কোনও অ্যাকশন সবসময় ওভারফ্লো মেনুতে দেখানো হয়, অ্যাপ বারে দেখানোর পরিবর্তে।

অ্যাকশন বার আইকন সহ Now in Android অ্যাপ দেখানো ছবি
ছবি ১. "Now in Android" অ্যাপে একটি অ্যাকশন আইকন।

অ্যাকশন বোতাম যোগ করুন

অ্যাকশন ওভারফ্লোতে উপলভ্য সব অ্যাকশন বোতাম ও অন্যান্য আইটেম XML মেনু রিসোর্সে সংজ্ঞায়িত করা হয়। অ্যাকশন বারে অ্যাকশন যোগ করতে, আপনার প্রোজেক্টের res/menu/ ডিরেক্টরিতে একটি নতুন XML ফাইল তৈরি করুন।

অ্যাকশন বারে আপনি যে আইটেম যোগ করতে চান তার জন্য একটি <item> এলিমেন্ট যোগ করুন, যেমনটি নিম্নলিখিত স্যাম্পেল মেনু XML ফাইলে দেখানো হয়েছে:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- "Mark Favorite", must appear as action button if possible. -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, must always be in the overflow. -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

app:showAsAction অ্যাট্রিবিউট নির্দিষ্ট করে যে অ্যাকশনটি অ্যাপ বারে বোতাম হিসেবে দেখানো হয়েছে কিনা। আপনি যদি app:showAsAction="ifRoom"—যেমন উদাহরণ কোডের পছন্দের অ্যাকশন—সেট করেন, তাহলে অ্যাপ বারে জায়গা থাকলে অ্যাকশনটি বোতাম হিসেবে দেখানো হয়। পর্যাপ্ত জায়গা না থাকলে, অতিরিক্ত অ্যাকশন ওভারফ্লো মেনুতে পাঠানো হয়। আপনি যদি app:showAsAction="never" সেট করেন—যেমন উদাহরণ কোডের সেটিংস অ্যাকশনে—অ্যাকশনটি সবসময় ওভারফ্লো মেনুতে তালিকাভুক্ত থাকে এবং অ্যাপ বারে দেখানো হয় না।

অ্যাপ বারে অ্যাকশন দেখানো হলে, সিস্টেম অ্যাকশনের আইকনকে অ্যাকশন বোতাম হিসেবে ব্যবহার করে। আপনি মেটেরিয়াল আইকন-এ অনেক প্রয়োজনীয় আইকন খুঁজে পাবেন।

অ্যাকশনের উত্তর দিন

ব্যবহারকারী অ্যাপ বারের কোনও আইটেম বেছে নিলে, সিস্টেম আপনার অ্যাক্টিভিটির onOptionsItemSelected() কলব্যাক পদ্ধতি কল করে এবং কোন আইটেম ট্যাপ করা হয়েছে তা দেখানোর জন্য MenuItem অবজেক্ট পাস করে। onOptionsItemSelected()-এর ইমপ্লিমেন্টেশনে, MenuItem.getItemId() মেথড কল করে কোন আইটেমে ট্যাপ করা হয়েছে তা নির্ধারণ করুন। ফেরত পাওয়া আইডিটি আপনার সংশ্লিষ্ট <item> এলিমেন্টের android:id অ্যাট্রিবিউটে ঘোষণা করা মানের সাথে মিলে যায়।

যেমন, নিম্নলিখিত কোড স্নিপেট চেক করে যে ব্যবহারকারী কোন অ্যাকশন বেছে নিয়েছেন। পদ্ধতিটি ব্যবহারকারীর অ্যাকশন শনাক্ত করতে না পারলে, এটি সুপারক্লাস পদ্ধতিকে আহ্বান করে:

Kotlin

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    R.id.action_settings -> {
        // User chooses the "Settings" item. Show the app settings UI.
        true
    }

    R.id.action_favorite -> {
        // User chooses the "Favorite" action. Mark the current item as a
        // favorite.
        true
    }

    else -> {
        // The user's action isn't recognized.
        // Invoke the superclass to handle it.
        super.onOptionsItemSelected(item)
    }
}

জাভা

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chooses the "Settings" item. Show the app settings UI.
            return true;

        case R.id.action_favorite:
            // User chooses the "Favorite" action. Mark the current item as a
            // favorite.
            return true;

        default:
            // The user's action isn't recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}