web-dev-qa-db-fra.com

Changer la couleur de fond du menu Android

J'essaie de changer le gris clair standard en vert clair. Il semble qu'il n'y ait pas de moyen simple de le faire (via Thèmes Android, par exemple), mais j'ai trouvé une solution de contournement comme expliqué sur cette page: http://tinyurl.com/342dgn3

L'auteur semble avoir disparu, quelqu'un peut-il m'aider à intégrer ce code? Je ne comprends pas où j'ai besoin d'implémenter la classe d'usine LayoutInflater

19
rciovati

Lorsque vous gonflez le menu, appelez cette méthode setMenuBackground ()

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

et écrivez ceci dans la méthode 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;
    }}); 
}
10
Abhay Kumar

Il s'agit clairement d'un problème rencontré par de nombreux programmeurs et pour lequel Google n'a pas encore fourni de solution satisfaisante et prise en charge.

Le piratage setMenuBackground () qu'Abhay Kumar et Nik Reiman ont publié est un bon début, mais il se bloque ou ne fonctionne pas sur Android 2.3.

S'il vous plaît voir ma réponse (Louis Semprini) dans cette question stackoverflow pour un hack mieux commenté et plus raffiné qui fonctionne sur 2.1, 2.2 et 2.3 (et qui ne devrait pas nuire à 3.X, bien que nous ne puissions jamais le garantir):

Comment changer la couleur de fond du menu d'options?

En outre, voici de nombreuses autres ressources qui pourraient vous être utiles pour cette question:

Changer la couleur de fond du menu Android

Android: personnaliser le menu de l'application (par exemple, la couleur de fond)

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

Android MenuItem Toggle Button

Est-il possible de rendre le fond du menu des options Android non translucide?

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

Réglage de l'arrière-plan du menu sur opaque

5
Louis Semprini

Utilisez setMenuBackground dans onCreate.

0
locoboy