2009-10-20 13 views
18

Jaki jest sposób (jeśli istnieje sposób), aby dostosować menu (ten wywołany przez przycisk menu telefonu). Jestem szczególnie zainteresowany w dwóch rzeczy:Android: dostosować menu aplikacji (na przykład kolor tła)

  • zmianę koloru tła ze standardowej jasnoszarego do ciemniejszy szary
  • jak elementy menu są wyrównane. Mam 4 elementy i są one automatycznie wyrównane 2x2, ale wolałbym je wszystkie w jednym wierszu (1x4)
+0

Teraz to pytanie jest stary, ale dla tych, którzy chcą dostosować ** Action Bar przepełnienia * * kolor tła menu (powiedzmy, na Androidzie 4.0+), patrz tego rozwiązania: http://stackoverflow.com/a/20077381/56285 – Jonik

Odpowiedz

8

Nie z wbudowanym schematem menu.

Możesz przechwycić przycisk MENU (przez onKeyDown() lub coś w tym stylu) i renderować to, co chcesz, ale pamiętaj, że użytkownicy będą oczekiwać, że będzie wyglądał jak pozostałe menu na swoim urządzeniu.

+1

dzięki. Wtedy na razie pomijam to i być może zaimplementuję go później, gdy będzie więcej czasu. – znq

+0

widziałem niestandardowe aranżacje menu (jak widać tutaj http://androidandme.com/wp-content/uploads/2009/12/05.categories_optionmenu.jpg) więc musi być jakiś sposób, aby to zrobić. – mtmurdock

+0

@mtmurdock: Nie z wbudowaną strukturą menu. – CommonsWare

4

Można też po prostu wdrożyć „onCreateOptionsMenu” metodę, która jest zwykle używany do wyświetlania standardowego menu i wyświetlić cokolwiek chcesz w tym przypadku.

W mojej grze, I wdrożone go, aby wyświetlić okno dialogowe „Gra wstrzymana”, gdy zostanie naciśnięty przycisk menu ...

1

kolor tła menu w style.xml w temacie

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

This answer działa, ale rozbił się na mnie podczas korzystania ActionBarSherlock. Oto hacky obejście, aby zrobić to mimo wszystko.

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

Użyj stylów. Działa to dla mnie na Androida 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> 

... wtedy odkształcalne jest regularny selektor

<?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> 
Powiązane problemy