ऐक्शन व्यू और ऐक्शन देने वाली कंपनियों का इस्तेमाल करना

AndroidX लाइब्रेरी का Toolbar से यह सुविधा मिलती है आपके ऐप्लिकेशन के साथ इंटरैक्ट करने के लिए, उपयोगकर्ताओं के लिए अलग-अलग तरीके. कार्रवाइयां जोड़ें और मैनेज करें में, यह पता चलता है कि किसी कार्रवाई को परिभाषित करें, जो कोई बटन या मेन्यू आइटम हो सकती है. इस दस्तावेज़ में, Google Analytics 4 प्रॉपर्टी को जोड़ने का तरीका बताया गया है ये दो कॉम्पोनेंट हैं:

  • ऐक्शन व्यू, एक ऐसी कार्रवाई है जो ऐप्लिकेशन बार में बेहतर सुविधाएं उपलब्ध कराती है. इसके लिए उदाहरण के लिए, सर्च ऐक्शन व्यू की मदद से उपयोगकर्ता, ऐप्लिकेशन बार में खोज टेक्स्ट टाइप कर सकते हैं. गतिविधियों या फ़्रैगमेंट को बदलने के लिए.
  • कार्रवाई की सेवा देने वाली कंपनी अपनी पसंद के लेआउट वाली कार्रवाई होती है. शुरुआत में बटन या मेन्यू आइटम के तौर पर दिखता हो; जब उपयोगकर्ता कार्रवाई पर टैप करता है, तो कार्रवाई की सेवा देने वाली कंपनी कंट्रोल करती है कार्रवाई का व्यवहार किसी भी प्रकार से तय करें. उदाहरण के लिए, कार्रवाई की सेवा देने वाली कंपनी टैप करके मेन्यू दिखाएं.

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() ताकि सुपर क्लास, ऐक्शन व्यू को बड़ा कर सके.

अगर कार्रवाई को बड़ा या छोटा करने के बाद कुछ करना हो, तो implements 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 कस्टम ऐक्शन की सुविधा देने वाली कंपनी बनाने के बारे में ज़्यादा जानें.