it-swarm.com.de

Hintergrundfarbe des Android-Menüs ändern

Ich versuche, das Standardlichtgrau in ein Hellgrün zu ändern. Anscheinend gibt es keine einfache Möglichkeit, dies zu tun (z. B. über Android-Themes). Ich habe jedoch einen Workaround gefunden, der auf dieser Seite erläutert wird: http://tinyurl.com/342dgn3

Der Autor scheint verschwunden zu sein. Kann mir jemand helfen, diesen Code zu integrieren? Ich verstehe nicht, wo ich die Factory-Klasse LayoutInflater implementieren muss. 

19
rciovati

Rufen Sie beim Aufblasen des Menüs diese Methode setMenuBackground () auf

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

und schreiben Sie dies in die setMenuBackground () -Methode

    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

Dies ist eindeutig ein Problem, das viele Programmierer haben und auf das Google bisher noch keine zufriedenstellende, unterstützte Lösung gefunden hat.

Der setMenuBackground () - Hack, den Abhay Kumar und Nik Reiman gepostet haben, ist zwar ein guter Anfang, stürzt jedoch ab oder funktioniert auf Android 2.3 nicht.

Bitte lesen Sie meine Antwort (Louis Semprini) in dieser stackoverflow-Frage für einen besser kommentierten und verfeinerten Hack, der auf 2.1, 2.2 und 2.3 funktioniert (und sollte auf 3.X keinen Schaden anrichten, obwohl wir dies niemals garantieren können):

Wie kann ich die Hintergrundfarbe des Optionsmenüs ändern?

Hier finden Sie auch viele andere Ressourcen, die für diese Frage hilfreich sein könnten:

Hintergrundfarbe des Android-Menüs ändern

Android: Menü der Anwendung anpassen (z. B. Hintergrundfarbe)

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

Android-Menüeintragstaste

Ist es möglich, den Hintergrund des Android-Optionsmenüs nicht transparent zu machen?

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

Den Hintergrund des Menüs als undurchsichtig festlegen

5
Louis Semprini

Verwenden Sie das setMenuBackground in onCreate.

0
locoboy