2010-04-27 43 views
19

Estoy tratando de cambiar el gris claro estándar a un verde claro. Parece que no hay una forma sencilla de hacerlo (a través de temas de Android, por ejemplo), pero he encontrado una solución como se explica en esta página: http://tinyurl.com/342dgn3.Cambiar el color de fondo del menú de Android

El autor parece desaparecer, ¿alguien puede ayudarme a integrar este código? No entiendo dónde debo implementar la clase de fábrica LayoutInflater.

+0

Si alguien está interesado he resuelto. http://pastebin.com/1QHGTMUW simplemente llame al setMenuBackground en el onCreate – rciovati

+0

Así es como obtuve el color de fondo del menú personalizado de Action Bar trabajando en Android 4.0+: http://stackoverflow.com/a/20077381/56285 – Jonik

+0

intento Usted codifica, pero primero me dice que elimine @Override y luego nada se abre. Traté de cambiar el color de fondo del menú. – Kenji

Respuesta

10

Cuando ur están inflando la llamada menú de esta setMenuBackground método()

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

y escribir esto en el método setMenuBackground()

protected void setMenuBackground(){      
     // Log.d(TAG, "Enterting setMenuBackGround"); 
     getLayoutInflater().setFactory(new Factory() { 
      public View onCreateView(String name, Context context, AttributeSet attrs) { 
       if (name.equalsIgnoreCase("com.android.internal.view.menu.IconMenuItemView")) { 
        try { // Ask our inflater to create the view 
         LayoutInflater f = getLayoutInflater(); 
         final View view = f.createView(name, null, attrs); 
         /* The background gets refreshed each time a new item is added the options menu. 
         * So each time Android applies the default background we need to set our own 
         * background. This is done using a thread giving the background change as runnable 
         * object */ 
         new Handler().post(new Runnable() { 
          public void run() { 
           // sets the background color 
           view.setBackgroundResource(R.color.androidcolor); 
           // sets the text color    
           ((TextView) view).setTextColor(Color.BLACK); 
           // sets the text size    
           ((TextView) view).setTextSize(18); 
       } 
         }); 
        return view; 
       } 
      catch (InflateException e) {} 
      catch (ClassNotFoundException e) {} 
     } 
     return null; 
    }}); 
} 
+1

¿Alguien ha conseguido que esto funcione? Parece que no tiene ningún efecto (Pan de jengibre) –

+0

Funciona con Android 2.2 no se ha comprobado con 2.3 –

+1

no está trabajando en 2.1 aquí – melanke

0

Use setMenuBackground en onCreate.

+0

oops veo que ya respondiste tu propia pregunta. buen trabajo. – locoboy

+0

donde ?? que OnCreate – user1882196

5

Esto es claramente un problema que muchos programadores tienen y a lo que Google aún debe proporcionar una solución satisfactoria y compatible.

El ataque de setMenuBackground() que publicaron Abhay Kumar y Nik Reiman es un buen comienzo, pero se bloquea o no funciona en Android 2.3.

Consulte mi respuesta (Louis Semprini) en esta pregunta stackoverflow para un mejor y más refinado hack que funciona en 2.1, 2.2 y 2.3 (y que no debería dañar 3.X, aunque nunca podemos garantizar esto):

How to change the background color of the options menu?

nuevo, aquí hay muchos otros recursos que pueden ser de utilidad para esta pregunta:

Change background color of android menu

Android: customize application's menu (e.g background color)

http://www.macadamian.com/blog/post/android_-_theming_the_unthemable/

Android MenuItem Toggle Button

Is it possible to make the Android options menu background non-translucent?

http://www.codeproject.com/KB/android/AndroidMenusMyWay.aspx

Setting the menu background to be opaque

Cuestiones relacionadas