Pregunta

Esta pregunta ya tiene una respuesta aquí:

Estoy tratando de cambiar el gris claro estándar a un verde claro. Parece que no hay una manera simple de hacer esto (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.

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

¿Fue útil?

Solución

Cuando estás inflando el menú, llame a este método setMenubackground ()

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

y escriba 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;
    }}); 
}

Otros consejos

Este es claramente un problema que tienen muchos programadores y al que Google aún no ha proporcionado una solución satisfactoria y compatible.

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

Consulte mi respuesta (Louis Semprini) en esta pregunta de StackoverFlow para un hack más mejor comentado y más refinado que funcione en 2.1, 2.2 y 2.3 (y eso no debería hacer daño en 3.x, aunque nunca podemos garantizar esto):

¿Cómo cambiar el color de fondo del menú de opciones?

Además, aquí hay muchos otros recursos que puede encontrar útil para esta pregunta:

Cambiar el color de fondo del menú Android

Android: personalizar el menú de la aplicación (por ejemplo, color de fondo)

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

Botón de alternativa de Menuitem Android

¿Es posible hacer que el menú de opciones de Android no sea translúcido?

http://www.codeproject.com/kb/android/androidmenusmyway.aspx

Configurar el fondo del menú para que sea opaco

Use el SetMenubackground en OnCreate.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top