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) }
Java
@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 }
Java
@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
देखें.