Domanda

    

Questa domanda ha già una risposta qui:

         

Sto cercando di cambiare il grigio chiaro standard per un verde chiaro. Sembra che non ci sia un modo semplice per fare questo (attraverso Android temi, per esempio), ma ho trovato una soluzione alternativa, come spiegato in questa pagina: http://tinyurl.com/342dgn3 .

L'autore sembra scomparso, Può qualcuno aiutarlo integrando questo codice? Non capisco dove ho bisogno di implementare la classe LayoutInflater fabbrica.

È stato utile?

Soluzione

Quando ur stanno gonfiando la chiamata menu di questo setMenuBackground () Metodo

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

e scrivere questo nel setMenuBackground () Metodo

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

Altri suggerimenti

Questo è chiaramente un problema che un sacco di programmatori hanno ea cui Google deve ancora fornire una soluzione supportata soddisfacente.

L'hack setMenuBackground (), che Abhay Kumar e Nik Reiman postato è un buon inizio, ma essa detiene, si blocca o non funziona su Android 2.3.

Si prega di vedere la mia risposta (Louis Semprini) in questa domanda StackOverflow per una migliore e più raffinato commentato hack che lavori su 2.1, 2.2, e 2.3 (e che dovrebbe fare nulla di male su 3.X, anche se non possiamo mai garantire questo ):

come cambiare il colore delle opzioni di sfondo menù?

Inoltre, qui ci sono molte altre risorse si possono trovare utili per questa domanda:

Cambia il colore di sfondo del menu di Android

Android: menù (ad esempio il colore di sfondo) dell'applicazione personalizzare

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

Android MenuItem Toggle Pulsante

E 'possibile effettuare Android opzioni sfondo del menu non traslucido?

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

Impostazione dello sfondo del menu per essere opaco

Usa il setMenuBackground in onCreate.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top