Wie ändere ich die Hintergrundfarbe von Action Bar's Option Menü in Android 4.2?

Ich möchte die Hintergrundfarbe des Options- (Überlauf-) Menüs in Android 4.2 ändern. Ich habe alle Methoden ausprobiert, aber es zeigt immer noch die Standardfarbe, die durch das Thema eingestellt wurde. Ich habe die folgenden Code & XML-Konfigurationen verwendet.

MainActivity.java

  • Button mit benutzerdefiniertem XML-Layout
  • Warum notificationManagerCompat :: cancelAll () bekommt SecurityException?
  • Zugriff auf lokale Host-Website in Android-Gerät über Wifi
  • Android DownloadManager.ERROR_FILE_ERROR
  • Android ActionBar.Tab setCustomView () nicht füllen_parent
  • Wie kann man Dokumente (.pdf, .doc) ohne externe App öffnen / anzeigen?
  • public class MainActivity extends Activity { @SuppressLint("NewApi") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getActionBar().setIcon(R.drawable.ic_launcher); getActionBar().setTitle("Sample Menu"); getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#33B5E5"))); int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android"); TextView titleText = (TextView)findViewById(titleId); titleText.setTextColor(Color.parseColor("#ffffff")); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); setMenuBackground(); return true; } protected void setMenuBackground(){ // Log.d(TAG, "Enterting setMenuBackGround"); getLayoutInflater().setFactory( new Factory() { @Override 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.menubg); // sets the text color ((TextView) view).setTextColor(Color.WHITE); // sets the text size ((TextView) view).setTextSize(18); } } ); return view; } catch ( InflateException e ) {} catch ( ClassNotFoundException e ) {} } return null; }}); } } 

    Menu.xml

     <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_settings" android:icon="@drawable/menu" android:showAsAction="always" android:title="@string/action_settings"> <menu> <item android:id="@+id/item1" android:showAsAction="always" android:title="@string/item1" /> <item android:id="@+id/item2" android:showAsAction="always" android:title="@string/item2" /> <item android:id="@+id/item3" android:showAsAction="always" android:title="@string/item3" /> <item android:id="@+id/item4" android:showAsAction="always" android:title="@string/item4" /> </menu> </item> </menu> 

    Color.xml

     <color name="menubg">#33B5E5</color> 

    Das obige setMenuBackground nimmt keine Wirkung aus:

    Menübeispiel

    Im obigen Bild möchte ich den Menühintergrund von schwarz auf die blaue Farbe in der Aktionsleiste ändern . Wie kann ich das erreichen und was habe ich falsch gemacht?

  • Eclipse DDMS zeigt Emulator beim Neustart nicht an
  • Wie man Weg in die Ansicht in android zu ziehen
  • Wie kann man mit Android GridView gleich beabsichtigen?
  • Wie kann man die Android-APK-Größe reduzieren?
  • Android: Verhalten von launchMode = "singleTask" nicht wie beschrieben?
  • Android Build - Emulator auf Android Stiefel Logo stecken
  • 11 Solutions collect form web for “Wie ändere ich die Hintergrundfarbe von Action Bar's Option Menü in Android 4.2?”

    Es gibt eine einfache Möglichkeit, die Farben in Actionbar zu ändern Verwenden Sie ActionBar Generator und kopieren Sie alle Datei in Ihren res Ordner und ändern Sie Ihr Design in Android.manifest Datei.

    Der Action-Style-Style-Generator , der von Sunny vorgeschlagen wird , ist sehr nützlich, aber es erzeugt viele Dateien, von denen die meisten irrelevant sind, wenn man nur die Hintergrundfarbe ändern möchte.

    Also, ich grub tiefer in den Reißverschluss, den es erzeugt, und versuchte zu verengen, was sind die Teile, die wichtig sind, also kann ich die minimale Menge an Änderungen an meiner App machen. Unten ist das, was ich herausgefunden habe.


    Im Style-Generator ist die entsprechende Einstellung Popup-Farbe , die sich auf " Overflow-Menü , Untermenü und Spinner-Panel-Hintergrund" auswirkt.

    Bildbeschreibung hier eingeben

    Gehen Sie auf und erzeugen Sie den Zip, aber aus allen Dateien generiert, man braucht nur ein Bild, menu_dropdown_panel_example.9.png , das sieht so aus:

    Bildbeschreibung hier eingeben

    Also, füge die verschiedenen Auflösungsversionen von res/drawable-* . (Und vielleicht umbenennen sie zu menu_dropdown_panel.9.png .)

    Dann, als Beispiel, in res/values/themes.xml Sie folgendes, mit android:popupMenuStyle und android:popupBackground ist die Schlüsseleinstellungen.

     <resources> <style name="MyAppActionBarTheme" parent="android:Theme.Holo.Light"> <item name="android:popupMenuStyle">@style/MyApp.PopupMenu</item> <item name="android:actionBarStyle">@style/MyApp.ActionBar</item> </style> <!-- The beef: background color for Action Bar overflow menu --> <style name="MyApp.PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_dropdown_panel</item> </style> <!-- Bonus: if you want to style whole Action Bar, not just the menu --> <style name="MyApp.ActionBar" parent="android:Widget.Holo.Light.ActionBar.Solid"> <!-- Blue background color & black bottom border --> <item name="android:background">@drawable/blue_action_bar_background</item> </style> </resources> 

    Und natürlich in AndroidManifest.xml :

     <application android:theme="@style/MyAppActionBarTheme" ... > 

    Was bekommst du mit diesem Setup:

    Bildbeschreibung hier eingeben

    Beachten Sie, dass ich mit Theme.Holo.Light als Basis-Thema. Wenn du Theme.Holo (Holo Dark) benutzt, da ist ein zusätzlicher Schritt nötig, wie diese Antwort beschreibt !

    Auch wenn du (wie ich) die ganze Action Bar res/drawable/blue_action_bar_background.xml , nicht nur das Menü, so etwas in res/drawable/blue_action_bar_background.xml :

     <!-- Bonus: if you want to style whole Action Bar, not just the menu --> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <stroke android:width="2dp" android:color="#FF000000" /> <solid android:color="#FF2070B0" /> </shape> </item> <item android:bottom="2dp"> <shape android:shape="rectangle"> <stroke android:width="2dp" android:color="#FF2070B0" /> <solid android:color="#00000000" /> <padding android:bottom="2dp" /> </shape> </item> </layer-list> 

    Funktioniert zumindest auf Android 4.0+ (API Level 14+).

    Für den Fall, dass die Leute noch für eine Arbeitslösung besuchen, hier ist was für mich gearbeitet: – Dies ist für die Appcompat-Support-Bibliothek. Dies ist in Fortsetzung zu ActionBar Styling erklärt hier

    Im Folgenden ist die Datei styles.xml.

     <resources> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light"> <!-- This is the styling for action bar --> <item name="actionBarStyle">@style/MyActionBar</item> <!--To change the text styling of options menu items</item>--> <item name="android:itemTextAppearance">@style/MyActionBar.MenuTextStyle</item> <!--To change the background of options menu--> <item name="android:itemBackground">@color/skyBlue</item> </style> <style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> <item name="background">@color/red</item> <item name="titleTextStyle">@style/MyActionBarTitle</item> </style> <style name="MyActionBarTitle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">@color/white</item> </style> <style name="MyActionBar.MenuTextStyle" parent="style/TextAppearance.AppCompat.Widget.ActionBar.Title"> <item name="android:textColor">@color/red</item> <item name="android:textStyle">bold</item> <item name="android:textSize">25sp</item> </style> </resources> 

    Und das ist, wie es aussieht – MenuItem Hintergrundfarbe ist skyblue und MenuItem Textfarbe ist rosa mit Texte als 25sp: –

    Bildbeschreibung hier eingeben

    Wenn Sie dies lesen, ist es wahrscheinlich, weil alle vorherigen Antworten nicht für Ihr Holo Dark basiertes Thema funktionierten.

    Holo Dark verwendet einen zusätzlichen Wrapper für den PopupMenus, also nach dem, was Jonik vorgeschlagen hat, dass du den folgenden Style deiner 'xml' Datei hinzufügen musst:

     <style name="PopupWrapper" parent="@android:style/Theme.Holo"> <item name="android:popupMenuStyle">@style/YourPopupMenu</item> </style> 

    Dann verweise ich in deinem Themenblock:

     <style name="Your.cool.Theme" parent="@android:style/Theme.Holo"> . . . <item name="android:actionBarWidgetTheme">@style/PopupWrapper</item> </style> 

    Das ist es!

    Mein einfacher Trick, um Hintergrundfarbe und Farbe des Textes im Popup-Menü / Optionsmenü zu ändern

     <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo"> <item name="android:popupMenuStyle">@style/MyPopupMenu</item> <item name="android:itemTextAppearance">@style/TextAppearance</item> </style> <!-- Popup Menu Background Color styles --> <style name="MyPopupMenu" parent="@android:style/Widget.Holo.ListPopupWindow"> <item name="android:popupBackground">@color/Your_color_for_background</item> </style> <!-- Popup Menu Text Color styles --> <style name="TextAppearance"> <item name="android:textColor">@color/Your_color_for_text</item> </style> 

    Sie können Styles und Themes im Overflow MenuItem nach unten anwenden. OverFlow-Menü ist ListView, so können wir das Thema nach Listenansicht anwenden.

    Wenden Sie unten Code in styles.xml an

     <style name="AppTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:dropDownListViewStyle">@style/PopupMenuListView</item> <item name="android:actionBarWidgetTheme">@style/PopupMenuTextView</item> <item name="android:popupMenuStyle">@style/PopupMenu</item> <item name="android:listPreferredItemHeightSmall">40dp</item> </style> <!-- Change Overflow Menu ListView Divider Property --> <style name="PopupMenuListView" parent="@android:style/Widget.Holo.ListView.DropDown"> <item name="android:divider">@color/app_navigation_divider</item> <item name="android:dividerHeight">1sp</item> <item name="android:listSelector">@drawable/list_selector</item> </style> <!-- Change Overflow Menu ListView Text Size and Text Size --> <style name="PopupMenuTextView" parent="@android:style/Widget.Holo.Light.TextView"> <item name="android:textColor">@color/app_white</item> <item name="android:textStyle">normal</item> <item name="android:textSize">18sp</item> <item name="android:drawablePadding">25dp</item> <item name="android:drawableRight">@drawable/navigation_arrow_selector</item> </style> <!-- Change Overflow Menu Background --> <style name="PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_overflow_bg</item> </style> 

    Ich konnte die Farbe des Aktionsüberlaufs ändern, indem ich nur den Hex-Wert anlegte:

      <!-- The beef: background color for Action Bar overflow menu --> <style name="MyApp.PopupMenu" parent="android:Widget.Holo.Light.ListPopupWindow"> <item name="android:popupBackground">HEX VALUE OF COLOR</item> </style> 

    Versuchen Sie diesen Code. Fügen Sie dieses Snippet zu Ihrem res> values> styles.xml hinzu

     <style name="AppTheme" parent="AppBaseTheme"> <item name="android:actionBarWidgetTheme">@style/Theme.stylingactionbar.widget</item> </style> <style name="PopupMenu" parent="@android:style/Widget.Holo.ListPopupWindow"> <item name="android:popupBackground">@color/DarkSlateBlue</item> <!-- for @color you have to create a color.xml in res > values --> </style> <style name="Theme.stylingactionbar.widget" parent="@android:style/Theme.Holo"> <item name="android:popupMenuStyle">@style/PopupMenu</item> </style> 

    Und in Manifest.xml fügen Sie unten Snippet unter Anwendung hinzu

      <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 

    Wenn Sie in der neuesten Symbolleiste im Android-Studio arbeiten, dann ist hier die kleinste Lösung Um die Symbolleistenoptionen Menüfarbe zu ändern, fügen Sie diese zu Ihrem Toolbar-Element hinzu

      app:popupTheme="@style/MyDarkToolbarStyle" 

    Dann in Ihrem styles.xml definieren Sie den Popup-Menü Stil

    <style name="MyDarkToolbarStyle" parent="ThemeOverlay.AppCompat.Light"> <item name="android:colorBackground">@color/mtrl_white_100</item> <item name="android:textColor">@color/mtrl_light_blue_900</item> </style>

    Beachten Sie, dass Sie colorBackground nicht verwenden müssen. Letzteres würde auf alles angewendet werden (das Menü selbst und jeder Menüpunkt), das erstere gilt nur für das Popup-Menü.

    Im Folgenden sind die Änderungen in Ihrem Thema für die Änderung der Aktionsleiste & Überlauf Menü Hintergrundfarbe erforderlich. Sie müssen "android: background" von actionBarStyle & popupMenuStyle konfigurieren

     <application android:name="...." android:theme="@style/AppLightTheme"> <style name="AppLightTheme" parent="android:Theme.Holo.Light"> <item name="android:actionBarStyle">@style/ActionBarLight</item> <item name="android:popupMenuStyle">@style/ListPopupWindowLight</item> </style> <style name="ActionBarLight" parent="android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">@color/white</item> </style> <style name="ListPopupWindowLight"parent="@android:style/Widget.Holo.Light.ListPopupWindow"> <item name="android:background">@color/white</item> </style> 

    Ich bin auch mit dem gleichen Problem geschlagen, endlich habe ich einfache Lösung. Fügte einfach eine Zeile zum Action-Bar-Stil hinzu.

     <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> <item name="android:textColorPrimary">@color/colorAccent</item> <item name="android:colorBackground">@color/colorAppWhite</item> </style> 

    "Android: colorBackground" reicht aus, um den Optionsmenü zu ändern

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.