ऐप्लिकेशन बार की मदद से, उपयोगकर्ता की कार्रवाइयों के लिए बटन जोड़े जा सकते हैं. इस सुविधा की मदद से, मौजूदा कॉन्टेक्स्ट के लिए सबसे अहम कार्रवाइयों को ऐप्लिकेशन में सबसे ऊपर रखा जा सकता है. उदाहरण के लिए, फ़ोटो ब्राउज़ करने वाला कोई ऐप्लिकेशन, उपयोगकर्ता के फ़ोटो रोल को देखते समय सबसे ऊपर शेयर करें और एल्बम बनाएं बटन दिखा सकता है. जब उपयोगकर्ता किसी फ़ोटो को देखता है, तो ऐप्लिकेशन काट-छांट करें और फ़िल्टर करें बटन दिखा सकता है.
ऐप्लिकेशन बार में जगह सीमित होती है. अगर कोई ऐप्लिकेशन, ऐप्लिकेशन बार में फ़िट होने से ज़्यादा कार्रवाइयां दिखाता है, तो ऐप्लिकेशन बार, अतिरिक्त कार्रवाइयों को ओवरफ़्लो मेन्यू में भेज देता है. ऐप्लिकेशन यह भी तय कर सकता है कि कोई कार्रवाई, ऐप्लिकेशन बार पर दिखाने के बजाय हमेशा ओवरफ़्लो मेन्यू में दिखे.
ऐक्शन बटन जोड़ना
ऐक्शन ओवरफ़्लो में मौजूद सभी ऐक्शन बटन और अन्य आइटम, एक्सएमएल मेन्यू रिसॉर्स में तय किए जाते हैं. ऐक्शन बार में ऐक्शन जोड़ने के लिए, अपने प्रोजेक्ट की res/menu/ डायरेक्ट्री में एक नई एक्सएमएल फ़ाइल बनाएं.
ऐक्शन बार में शामिल किए जाने वाले हर आइटम के लिए, <item> एलिमेंट जोड़ें. जैसा कि यहां दिए गए सैंपल मेन्यू एक्सएमएल फ़ाइल में दिखाया गया है:
<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" सेट किया है, तो उदाहरण के कोड में favorite ऐक्शन की तरह, ऐक्शन को बटन के तौर पर दिखाया जाता है. हालांकि, ऐसा तब ही होता है, जब ऐप्लिकेशन बार में इसके लिए जगह हो. अगर स्क्रीन पर जगह नहीं होती है, तो ज़्यादा ऐक्शन ओवरफ़्लो मेन्यू में भेज दिए जाते हैं. अगर आपने app:showAsAction="never" सेट किया है, तो कार्रवाई हमेशा ओवरफ़्लो मेन्यू में दिखेगी. ऐप्लिकेशन बार में नहीं दिखेगी. उदाहरण के लिए, कोड के settings ऐक्शन में ऐसा किया गया है.
अगर ऐक्शन, ऐप्लिकेशन बार में दिखता है, तो सिस्टम ऐक्शन के आइकॉन को ऐक्शन बटन के तौर पर इस्तेमाल करता है. आपको Material Icons में कई काम के आइकॉन मिल सकते हैं.
कार्रवाइयों का जवाब देना
जब उपयोगकर्ता, ऐप्लिकेशन बार में मौजूद किसी आइटम को चुनता है, तो सिस्टम आपकी गतिविधि के 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) } }
Java
@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); } }