Android Menus

Introduction to Android Menus

Menus किसी भी एप्लीकेशन का एक बहुत ही कॉमन इंटरफ़ेस होता है। यूजर को easy और designer यूज़र इंटरफ़ेस प्रोवाइड करने के लिए आप menus को यूज़ कर सकते है। Menus को आप नीचे दिए गए 3 reasons की वजह से use कर सकते है।

  • User को application के दूसरे components की link provide करने के लिए।
  • Application को structure प्रोवाइड करने के लिए।
  • easy navigation के लिए।

Android में menus 3 तरह की होते है।

  1. Options menus
  2. Context menus
  3. Popup menus

Creating a Menu in XML Layout File

सभी menu types के लिए menu items डिफाइन करने के लिए android एक स्टैण्डर्ड XML format प्रोवाइड करता है। अपनी activity के कोड में menu क्रिएट करने की बजाए यदि आप चाहे तो आप एक XML layout file में भी menus बना सकते है। बाद में आप इसे अपनी activity में load कर सकते है। ऐसी XML layout file को menu resource कहते है।

इसके लिए सबसे पहले आपको अपने प्रोजेक्ट की res/menu directory में एक XML फाइल क्रिएट करनी होगी।

XML file में menu क्रिएट करने के लिए आप कुछ elements को यूज़ करते है आइये इन एलिमेंट्स के बारे में जानने का प्रयास करते है।

<menu> - ये एलिमेंट menu define करता है। ये element menu items के base का काम करता है। आपकी file में सबसे पहले ये एलिमेंट ही declare होना चाहिए। इसके अंदर आप <item> और <group> एलिमेंट डाल सकते है।

<item> - ये एलिमेंट एक menu item क्रिएट करता है। हर item के लिए आपको एक item element declare करना होगा। <item> element कुछ attributes यूज़ करता है जो की नीचे दिए जा रहे है।

  • android : id - ये एक यूनिक id होती है जिसे android system menu item को uniquely identify करता है।
  • android : icon - इस attribute के द्वारा आप किसी image को item के icon की तरह use कर सकते है।
  • android : title - इस attribute में आप item का title declare करते है।

<group> - ये element भी container की तरह ही होता है, लेकिन ये एक जैसे menu items को एक साथ रखने के लिए use किया जाता है।

Example:

<menu xmlns:android="schema address">
<item andorid:id="1" android:icon="address of icon image" android:title="First Item">
<item andorid:id="2" android:icon="address of icon image" android:title="Second Item">
<item andorid:id="3" android:icon="address of icon image" android:title="Third Item">
</menu>

Options Menus

किसी भी application के लिए options menus primary menus होती है। Options menu में आपको वो options डालने चाहिए जो पूरी application को control करते है। जैसे की सर्च और सेटिंग्स का option आप options menus में डाल सकते है।

यदि आप android gingerbread या उससे lower versions के लिए एप्लीकेशन develop कर रहे है तो यूज़र menu बटन पर क्लिक करके menus को देख सकता है।

यदि आप android honeycomb या उससे उपर के versions के लिए options menus develop कर रहे है तो यूज़र app bar के द्वारा menus को access कर सकते है।

Creating Options Menus

Options menu के लिए items आप या तो activity subclass से या fragment subclass से डिक्लेअर कर सकते है। यदि आप दोनों तरीके से items डिक्लेअर करते है तो यूज़र interface में दोनों combine हो जाते है।

Activity के item पहले show होते है इसके बाद जिस order में fragments को ऐड किया गया था उसी आर्डर में उनके items शो होते है। यदि आप चाहे तो menu items को reorder भी कर सकते है।

किसी भी activity में options menu define करने के लिए आपको onCreateOptionsMenu() मेथड को override करना होता है। इस मेथड का स्ट्रक्चर नीचे दिया जा रहा है।

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
   // put menu resources in menu from XML
}    

इस मेथड के द्वारा आप मेनू resources को भी मेनू में डाल सकते है। आप चाहे तो आप add() मेथड के द्वारा items को add भी कर सकते है। और मेनू में items को ढूंढने के लिए आप findItem() मेथड यूज़ कर सकते है।

Context Menus

एक context menu वो option शो करती है जो किसी एक एलिमेंट को effect करती है. ये एलिमेंट वो होता है जिसे यूज़र ने long click करके छोड़ा है।

Context menus movable menus होती है। जब यूजर बहुत देर तक किसी एलिमेंट पर टच करके छोड़ता है तो ये menu शो होती है। ये उस element को effect करने वाले ऑप्शन प्रोवाइड करती है जिस पर यूज़र ने long क्लिक किया है।

यदि आप android honeycomb से higher versions के लिए एप्लीकेशन develop कर रहे है तो selected elements पर एक्शन परफॉर्म करने के लिए आपको contextual action mode यूज़ करना चाहिए।

आप किसी भी view के लिए context menu प्रोवाइड कर सकते है। लेकिन ज्यादातर इन्हे view groups के लिए यूज़ किया जाता है क्योंकि view groups elements पर direct actions परफॉर्म किये जा सकते है।

Creating Context Menus

Context menu क्रिएट करने के लिए सबसे पहले आपको जिस view के लिए आप context menu क्रिएट करना चाहते है उसको register करना होगा। इसके लिए आपको registerForContextMenu() मेथड कॉल करना होगा और उसमे view पास करना होगा।

इसके बाद आपको onCreateContextMenu() मेथड को ओवरराइड करना होगा। जब भी यूज़र registered view पर long क्लिक करता है तो system इस मेथड को कॉल करता है। इसी मेथड में आप menu items define करते है। इस मेथड का स्ट्रक्चर नीचे दिया जा रहा है -

@Override
public void onCreateContextMenu(ContextMenu contextmenu, View view, ContextMenuInfo contextmenuinfo)
{
   // declare menu items and put menu resources
}

इसके बाद आपको onContextItemSelected() मेथड को ओवरराइड करना होगा। जब भी कोई यूज़र menu में से कोई item select करता है system इस मेथड को कॉल करता है। आप item select होने पर जो task complete करना चाहते है वो इस मेथड में कर सकते है। इस मेथड का स्ट्रक्चर नीचे दिया जा रहा है।

@Override
public boolean onContextItemSelected(MenuItem item)
{
   // perform desired task
}

getItemId() मेथड से आप selected item की id पा सकते है और उस ही item पर action ले सकते है।

एक popup menu items को vertical list में शो करती है। Pop menus anchor view के साथ शो होती है। अगर जगह available होती है तो ये anchor view के नीचे show होती है नहीं तो anchor view के उपर शो होती है।

Popup menus ऐसे options प्रोवाइड करती है जो same activity में दूसरे views के साथ perform किये जा सकते है।

Creating Popup Menu

यदि आप menu को XML के द्वारा define करना चाहते है तो ऐसा आप इस तरह कर सकते है -

सबसे पहले आपको PopupMenu क्लास का एक object क्रिएट करना होगा। Object क्रिएट करते समय आप उसमे current application का context और वो view pass करेंगे जिसमे आप popup menu लगाना चाहते है।

इसके बाद PopupMenu.getMenu() मेथड कॉल करके आप को Menu का reference लेना होगा और MenuInflater की द्वारा menu में resources put करने होंगे।

सबसे आखिर में menu को शो करने के लिए PopupMenu.show() method कॉल करना होगा।