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देखें.