2012-08-16 24 views
23

मैं ओवरफ़्लो ड्रॉपडाउन मेनू में मेनू आइटम शीर्षक के अलावा आइकन प्रदर्शित करना चाहता हूं।एक्शनबार ओवरफ्लो मेनू में आइकन कैसे दिखाएं?

क्या संभव है?

+0

संभावित डुप्लिकेट [एक्शनबार में ओवरफ़्लो मेनू में आइकन कैसे दिखाएं] (http://stackoverflow.com/questions/18374183/how-to-show-icons-in-overflow-menu-in-actionbar) – user1931751

+0

संदर्भ @Kevin ग्रांट के जवाब http://stackoverflow.com/questions/18374183/how-to-show-icons-in-overflow-menu-in-actionbar – MashukKhan

उत्तर

1

यह डिज़ाइन द्वारा संभव नहीं है (कम से कम एचसी में - और मैं एपीआई 16 पर विकास कर रहा हूं और कोई आइकन नहीं प्राप्त कर रहा हूं)। Google नहीं चाहता कि हम ऐसा करें।

विषय पर चर्चा का एक सा के लिए, संबंधित जवाब यहाँ देखें:

टिप्पणियों में से एक का सुझाव, यदि आप माउस की जरूरत है, एक ड्रॉपडाउन मेनू के उपयोग पर विचार के रूप में, ओवरफ्लो मेनू के बजाए।

2

इस तरह से घृणा नफरत है, लेकिन मैं बेहतर जवाब देने के लिए पर्याप्त नहीं हूं।

मेनू के लिए ओवरफ़्लो आइटम के लिए आइकन उपमेनू 2 लाइन "subMenu2Item.setIcon (R.drawable.ic_launcher) है;" बस अपनी आइकन फ़ाइल (अपने प्रोग्राम की पुन: प्रयोज्य निर्देशिका में) के साथ ic_launcher को प्रतिस्थापित करें। आशा है कि आप ActionBarSherlock का उपयोग कर रहे हैं।

लाइन subMenu1Item.setIcon (R.drawable.ic_launcher); शीर्ष पर मेनू बटन के लिए एक्शनबार आइकन के लिए है।

जवाब में

"यह डिजाइन द्वारा संभव नहीं है" करने के लिए

दुनिया भर में लेने की कोशिश कर और हमें यह कोट पूंछ है की सवारी के लिए गूगल के लिए बहुत धन्यवाद, लेकिन ... Google के लिए भी अधिक गुस्सैल होने के लिए असंगत है विसंगतियों। यह अच्छा होगा अगर Google उनके द्वारा ऑफ़र किए गए एपीआई के "सेट" के लिए एक उदाहरण बना सकता है। कोड के लिए एपीआई संदर्भ हैं, लेकिन उन्हें एक साथ रखने के बारे में कोई उदाहरण नहीं है, एक पूरी तरह से काम करने वाला उदाहरण जिसे एपीके के रूप में चलाया जा सकता है, मैं चाहता हूं। मैं वहां से बाहर निकल सकता हूं। यदि वे एपीके लिखने के लिए समय ले सकते हैं तो मानक टेम्पलेट पर थोड़ा सा उदाहरण कोड करना कितना कठिन होगा? 30% सब कुछ के लिए पूछना ज्यादा नहीं है। मेरे पास माइक्रोसॉफ्ट के साथ दिन में यही तर्क था और यह तब भी नहीं हुआ था। और इस प्रकार और इसलिए आप stackoverflow मिलता है। :) यह एक शर्म की बात है कि यह कुछ लड़का (जेक व्हार्टन पर रॉक) अपने पीछे काम कर रहा है, जो कि पिछली संगत एक्शन बार के साथ बेहतर काम करने के लिए Google की हास्यास्पद एक्शन बार पैच चीज़ के साथ आ सकता है।

@Override 
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu) { 

    SubMenu subMenu1 = menu.addSubMenu("Action Item"); 
    subMenu1.add("Help"); 
    subMenu1.add("About"); 

    MenuItem subMenu1Item = subMenu1.getItem(); 
    subMenu1Item.setIcon(R.drawable.ic_launcher); 
    subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

    SubMenu subMenu2 = menu.addSubMenu("All Options"); 
    subMenu2.add("Help"); 
    subMenu2.add("About"); 

    MenuItem subMenu2Item = subMenu2.getItem(); 
    subMenu2Item.setIcon(R.drawable.ic_launcher); 

    return super.onCreateOptionsMenu(menu); 
} 
32

संपत्ति android:showAsAction="always" साथ और मेनू के xml फ़ाइल में अपने मेनू डाल उप मेनू जोड़ने के तहत है कि इस

<item 
     android:id="@+id/mainMenu" 
     android:icon="@drawable/launcher" 
     android:showAsAction="always"> 
     <menu> 

      <item 
       android:id="@+id/menu_logout" 
       android:icon="@drawable/log_out" 
       android:title="logout"/> 
     </menu> 
    </item> 

की तरह अपने मेनू इस मेनू में प्रतीक दिखाएगा

+1

एक charme तरह काम करता है, स्वीकार किए जाते हैं –

+2

सबमेनू प्रतीक नहीं दिखाया जाता है के रूप में चिह्नित किया जाना चाहिए जिंजरब्रेड में। 4.x –

+3

में ठीक काम कर रहे यह एक भौतिक मेनू बटन के साथ फोन के लिए उपयुक्त नहीं है। –

2
@Override 
public boolean onMenuOpened(int featureId, Menu menu) 
{ 
    if(featureId == Window.FEATURE_ACTION_BAR && menu != null){ 
     if(menu.getClass().getSimpleName().equals("MenuBuilder")){ 
      try{ 
       Method m = menu.getClass().getDeclaredMethod(
        "setOptionalIconsVisible", Boolean.TYPE); 
       m.setAccessible(true); 
       m.invoke(menu, true); 
      } 
      catch(NoSuchMethodException e){ 
       Log.e(TAG, "onMenuOpened", e); 
      } 
      catch(Exception e){ 
       throw new RuntimeException(e); 
      } 
     } 
    } 
    return super.onMenuOpened(featureId, menu); 
} 

संदर्भ : How To show icons in Overflow menu in ActionBar

+0

यदि आप प्रोगार्ड का उपयोग करते हैं तो यह टूट जाएगा। अपने प्रोजेवार्ड कॉन्फ़िगरेशन में मेनूबिल्डर को रखना चाहिए। –

4

वास्तव में इसे प्राप्त करने का एक आसान तरीका है, एस इन्स आप वास्तव में एक TextView है क्या देखते हैं, तो आप एक अवधि निर्धारित करते हैं, उदाहरण के लिए:

final MenuItem menuItem=... 
final ImageSpan imageSpan=new ImageSpan(this,R.drawable.ic_stat_app_icon); 
final CharSequence title=" "+menuItem.getTitle(); 
final SpannableString spannableString=new SpannableString(title); 
spannableString.setSpan(imageSpan,0,1,0); 
menuItem.setTitle(spannableString); 

यह सही अपने मूल पाठ से पहले मेनू आइटम की शुरुआत में एक आइकन डाल दिया जाएगा,।

+0

यह सबसे अच्छा समाधान है और शायद सबसे आसान समाधान है। आइकन अब मेनू आइटम पर छोड़ा गया है। लेकिन टेक्स्ट आइकन के नीचे संरेखित है। हम इसे लंबवत केंद्र कैसे बना सकते हैं? –

+0

@SureshKumar तुम्हारा मतलब है तुम चाहते हैं उन्हें दोनों लंबवत रूप से केंद्रित? Hmmmm ... शायद आप अपने खुद के अनुकूलित अवधि बना सकते हैं, लेकिन फिर मैं कितनी अच्छी तरह यह कुछ उपकरणों पर दिखेगा नहीं पता ... शायद वहाँ एक रास्ता है कि मैं इस के लिए के बारे में पता नहीं कर रहा हूँ है। चूंकि मैं इसे अब संभाल नहीं पा रहा हूं, अगर आपको पता चलता है कि आपको क्या मिला है, तो मुझे खुशी होगी, जैसे आप कुछ भी पाते हैं। –

+0

महान काम करता है। मुझे बस यह समझना होगा कि छवि के लिए एक निश्चित आकार कैसे सेट करें। वैसे भी, मुझे मिला सबसे अच्छा समाधान! मेरा आभार मानो! –

2

शायद आपको मेरे जैसा ही समस्या हो।

android:showAsAction="always" 

बजाय इस तरह इसका इस्तेमाल:: तो मेरे लिए समाधान यदि आप AppCompat उपयोग कर रहे हैं आसान था सिर्फ इस संपत्ति का उपयोग न

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/option" 
     android:title="@string/option" 
     android:icon="@drawable/option" 
     app:showAsAction="always"> 
    </item> 
</menu> 

वहाँ aditional xmlns में अंतर है: एप्लिकेशन और showAsActionएप्लिकेशन की संपत्ति है।

उम्मीद है कि यह किसी की मदद करेगा।

+2

आप शोएसएक्शन के साथ 'हमेशा' के रूप में प्रश्न को भी समझ नहीं पाते हैं, आइकन हमेशा दिखाया जाता है लेकिन यह एक क्रिया बार बटन की तरह है, बजाय ड्रॉप-डाउन मेनू के अंदर मेनू आइटम। निश्चित नहीं है कि इसे कुछ वोट क्यों मिले। –

+0

अन्य लोगों से जो प्रश्न को नहीं समझते हैं। – f470071

+0

@ किंगिंगकिंग को कुछ अपवॉट नहीं मिला क्योंकि यह सवाल, क्योंकि इसका जवाब "एक्शन बार" से संबंधित अन्य प्रकार की समस्याओं को हल करता है .... मेरे जैसे, मैं ऐपबार में आइकन प्रदर्शित करना चाहता हूं लेकिन आइटम ओवरफ्लो मेनू के अंदर जा रहे हैं .. और उसके जवाब ने मेरी जिंदगी बचाई .... मुझे पता है कि यह जवाब देने का स्थान नहीं है लेकिन कम से कम यह किसी की मदद करता है, उदाहरण के लिए, उदाहरण के लिए खुद –

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