2009-10-20 16 views
18

मेनू को कस्टमाइज़ करने के लिए तरीका (यदि कोई तरीका है) (फ़ोन के मेनू बटन द्वारा ट्रिगर किया गया) क्या है। मैं विशेष रूप से दो बातों में दिलचस्पी रखता हूँ:एंड्रॉइड: एप्लिकेशन के मेनू को अनुकूलित करें (जैसे पृष्ठभूमि रंग)

  • में मानक हल्के भूरे रंग से पृष्ठभूमि का रंग बदलने के गहरे सलेटी रंग
  • कैसे मेनू आइटम गठबंधन कर रहे हैं। मेरे पास 4 आइटम हैं और वे स्वचालित रूप से 2x2 गठबंधन होते हैं, लेकिन मैं उन्हें सभी को एक पंक्ति (1x4)
+0

अब है, इस सवाल पुराना है, लेकिन अनुकूलित करने के लिए ** कार्यवाही बार अतिप्रवाह वालों के लिए * * मेनू पृष्ठभूमि रंग (कहें, एंड्रॉइड 4.0+ पर), इस समाधान को देखें: http://stackoverflow.com/a/20077381/56285 – Jonik

उत्तर

8

अंतर्निहित मेनू ढांचे के साथ नहीं करना चाहूंगा।

आपका मेन्यू बटन (onKeyDown() या कुछ के माध्यम से) को रोकने के लिए आपका स्वागत है और जो भी आप चाहते हैं उसे प्रस्तुत करने के लिए आपका स्वागत है, लेकिन ध्यान रखें कि उपयोगकर्ता अपने डिवाइस पर बाकी मेनू की तरह दिखने की उम्मीद करेंगे।

+1

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

+0

मैंने मेन्यू की कस्टम व्यवस्था देखी है (जैसा कि यहां देखा गया है http://androidandme.com/wp-content/uploads/2009/12/05.categories_optionmenu.jpg) इसलिए ऐसा करने का एक तरीका होना चाहिए। – mtmurdock

+0

@mtmurdock: अंतर्निहित मेनू ढांचे के साथ नहीं। – CommonsWare

4

आप "ऑनक्रेटऑप्शनमेनू" विधि को भी लागू कर सकते हैं, जिसका उपयोग आमतौर पर मानक मेनू प्रदर्शित करने के लिए किया जाता है, और जो भी आप चाहते हैं उसे प्रदर्शित करते हैं।

मेरे खेल में, मैं एक "खेल रोका गया" संवाद बॉक्स प्रदर्शित करने के लिए जब मेनू बटन दबाया जाता है इसे लागू किया ...

13

मैं अपने खुद के मेनू वर्ग बनाया। यह शायद वही नहीं है जो आप चाहते हैं लेकिन उम्मीद है कि आपको शुरू करना चाहिए। यहां प्रकाशित लेख और स्रोत कोड के लिए एक डाउनलोड करने योग्य लिंक है। अपने विषय

<item name="android:panelFullBackground">@android:color/darker_gray</item> 
1

पृष्ठभूमि मेनू रंग, लेकिन जब ActionBarSherlock का उपयोग कर मेरे लिए दुर्घटनाग्रस्त हो गया। इस काम को फिर भी बनाने के लिए यहां एक हैकी कामकाज है।

// Black Vodoo! Do not try this at home. 

    final LayoutInflater li = getLayoutInflater(); 

    final Class<LayoutInflater> clazz = LayoutInflater.class; 

    try { 
     final Field fieldSet = clazz.getDeclaredField("mFactorySet"); 
     fieldSet.setAccessible(true); 
     fieldSet.setBoolean(li, false); 

     li.setFactory(new Factory() { 

      @Override 
      public View onCreateView(final String name, 
        final Context context, final AttributeSet attrs) { 
       if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { 
        try { 
         final LayoutInflater f = getLayoutInflater(); 
         final View view = f.createView(name, null, attrs); 
         new Handler().post(new Runnable() { 
          @Override 
          public void run() { 
           // Set the text color 
           ((TextView) view).setTextColor(Color.WHITE); 
          } 
         }); 
         return view; 
        } catch (final Exception e) { 
        } 
       } 
       return null; 
      } 
     }); 
    } catch (final Exception e) { 
     e.printStackTrace(); 
    } 
3

शैलियों का उपयोग करें। यह एंड्रॉयड पर मेरे लिए काम करता 5,0

<style name="AppTheme" parent="android:Theme.Material.Light"> 
    <item name="android:colorPrimary">@color/primary</item> 
    <item name="android:actionOverflowMenuStyle">@style/PopupMenu.MyStyle</item> 
</style> 

<style name="PopupMenu.MyStyle" parent="android:Widget.PopupMenu"> 
    <item name="android:popupBackground">@drawable/actionbar_item_background</item> 
</style> 

... तो drawable एक नियमित रूप से चयनकर्ता

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/primary"/> 
    <item android:drawable="@color/highlighted" android:state_pressed="true"/> 
</selector> 
संबंधित मुद्दे