2009-10-20 46 views
18

自定義菜單(通過手機的MENU按鈕觸發的菜單)的方式是什麼(如果有的話)。我在兩件事情特別感興趣:Android:自定義應用程序的菜單(例如背景顏色)

  • 改變從標準的淺灰色的背景色爲深灰色
  • 菜單項是如何排列的。我有4個項目,他們自動對齊2×2,但我寧願他們都在一行(1×4)
+0

現在,這個問題是舊的,但對於那些希望定製**操作欄溢出* *菜單背景顏色(比如在Android 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

您也可以實現通常用於顯示標準菜單的「onCreateOptionsMenu」方法,並在這種情況下顯示您想要的任何內容。

在我的比賽,我實現它按下菜單按鈕時,顯示「遊戲暫停」對話框...

1

背景菜單顏色在你的主題

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

This answer的作品,但墜毀我。這是一個蠻幹的解決方法,使這項工作毫無意義。

// 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

使用樣式。 這對我的作品在Android 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> 

...然後繪製是一個常規選擇

<?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> 
相關問題