40

नए अपडेट में Google ने एक नई एपीआई समर्थन लाइब्रेरी जारी की है, जो एपीआई स्तर 7+ में एक्शनबार का समर्थन करता है।`ActionBarActivity` के साथ android.support.v7 कोई मेनू दिखाता है

मैं इस अद्यतन जब तक ActionBarSherlock का इस्तेमाल किया और मैं मेनू लोड करने के लिए कोड लिखा है:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.activity_main, menu); 
    return true; 
} 

और मेनू फ़ाइल:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" android:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" android:showAsAction="always"></item> 
</menu> 

कार्रवाई पट्टी पर मेनू बटन सेट करने के लिए। यह कोड एक्शनबैरशेलॉक के साथ पूरी तरह से काम करता है। लेकिन जब मैंने एक्शन बार को नई सपोर्ट लाइब्रेरी में बदल दिया, तो बटन एक्शन बार में नहीं दिखाए जाते हैं। भले ही वे android:showAsAction="always" के रूप में सेट हैं। और जब मैं कोड डीबग करता हूं, तो फ़ंक्शन menu.getSize() वापसी 2, और यह सही है, लेकिन कोई बटन नहीं दिखाया गया है ..

बटन नई समर्थन लाइब्रेरी में क्यों नहीं दिखाए जाते हैं?

उत्तर

104

अपने डिवाइस या एमुलेटर पर मेनू बटन दबाकर देखें, और देखें कि वे ओवरफ़्लो में दिखाई देते हैं या नहीं।

यदि वे करते हैं, तो समस्या यह है कि आपके <menu> XML को बदलने की आवश्यकता है। मेनू एक्सएमएल जो एक्शनबैरशेलॉक के साथ काम करता है और मूल एपीआई लेवल 11+ एक्शन बार ऐपकंपेट एक्शन बार बैकपोर्ट के साथ काम नहीं करेगा।

आपका मेनू एक्सएमएल इस तरह देखने के लिए की आवश्यकता होगी:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" 
> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" yourapp:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" yourapp:showAsAction="always"></item> 
</menu> 

और तुम कुछ और कार्रवाई बार से संबंधित के लिए एक ही yourapp उपसर्ग का उपयोग करने की आवश्यकता होगी (जैसे, yourapp:actionLayout)।

आप इसे the action bar documentation में शामिल देख सकते हैं।

+2

हाँ, समस्या 'xmlns: yourapp = "http://schemas.android.com/apk/res-auto" 'थी। यह समर्थन v7 के लिए बदल गया है? 'ActionBarSherlock' में कारण मेरा पुराना कोड पूरी तरह से – nrofis

+5

@nrofis काम करता है: मुझे नहीं पता कि AppCompat 'एंड्रॉइड: शोएएसएक्शन' का उपयोग नहीं कर सकता है जिस तरह से ActionBarSherlock कर सकता है। – CommonsWare

+0

धन्यवाद यह एक छोटा और अजीब बदलाव है जिसे मैंने अनदेखा करने में कामयाब रहे! –

0

आप दोनों पाठ और एक आइकन देखना चाहते हैं तो मैं the answer.

एक छोटे से जोड़ना चाहते हैं, showAsAction मैं सिर्फ यह परीक्षण किया है में withText का इस्तेमाल करें; जब मैंने always या ifRoomwithText के बिना उपयोग किया, तो मैंने केवल एक आइकन देखा।

संबंधित मुद्दे