Ich möchte die Hintergrundfarbe des Optionsmenüs (Überlauf) in Android 4.2 ändern. Ich habe alle Methoden ausprobiert, aber es zeigt immer noch die vom Design eingestellte Standardfarbe. Ich habe den folgenden Code & XML-Configs verwendet.
MainActivity.Java
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 hat keine Wirkung:
In der obigen Abbildung möchte ich den Menühintergrund von Schwarz in die blaue Farbe in der Aktionsleiste ändern . Wie kann ich das erreichen und was habe ich falsch gemacht?
Es gibt eine einfache Möglichkeit, die Farben in Actionbar zu ändern .__ Verwenden Sie ActionBar Generator und fügen Sie alle Dateien in Ihren res
-Ordner ein, und ändern Sie Ihr Design in der Android.manifest-Datei.
Der Action Bar Style Generator , , der von Sunny vorgeschlagen wird, ist sehr nützlich, erzeugt jedoch viele Dateien, von denen die meisten irrelevant sind, wenn Sie nur die ändern möchten Hintergrundfarbe.
Also habe ich tiefer in die von ihm generierte Zip-Datei gegraben und versucht, die wichtigsten Elemente einzugrenzen, damit ich die minimalen Änderungen an meiner App vornehmen kann. Unten ist was ich herausgefunden habe.
Im Style-Generator ist die entsprechende Einstellung Popup-Farbe, die sich auf "Overflow-Menü, Untermenü und Hintergrund des Drehfelds" auswirkt.
Machen Sie weiter und generieren Sie die Zip-Datei, aber von allen generierten Dateien benötigen Sie wirklich nur ein Bild, menu_dropdown_panel_example.9.png
, das ungefähr so aussieht:
Fügen Sie also die verschiedenen Auflösungsversionen zu res/drawable-*
hinzu. (Und benennen Sie sie möglicherweise in menu_dropdown_panel.9.png
um.)
Als Beispiel hätten Sie in res/values/themes.xml
folgendes: Android:popupMenuStyle
und Android:popupBackground
sind 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 Sie mit diesem Setup bekommen:
Beachten Sie, dass ich Theme.Holo.Light
als Basisdesign verwende. Wenn Sie Theme.Holo
(Holo Dark) verwenden, ist ein zusätzlicher Schritt erforderlich, da diese Antwort beschreibt !
Wenn Sie (wie ich) die gesamte Aktionsleiste und nicht nur das Menü gestalten möchten, geben Sie Folgendes in res/drawable/blue_action_bar_background.xml
ein:
<!-- 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 und höher (API-Ebene 14 und höher).
Für den Fall, dass die Leute immer noch nach einer funktionierenden Lösung suchen, funktionierte für mich Folgendes: - Dies ist für die Appcompat-Unterstützungsbibliothek .. _. Dies wird in Fortsetzung zum ActionBar-Styling hier erklärt
Nachfolgend finden Sie 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 so sieht es aus - MenuItem-Hintergrundfarbe ist himmelblau und MenuItem-Textfarbe ist rosa mit Textgröße als 25sp: -
Wenn Sie dies lesen, liegt dies wahrscheinlich daran, dass alle vorherigen Antworten für Ihr Holo Dark - basiertes Thema nicht funktionierten.
Holo Dark verwendet einen zusätzlichen Wrapper für den PopupMenus. Nachdem Sie was Jonik vorgeschlagen hat müssen Sie Ihrer 'xml'-Datei den folgenden Stil hinzufügen:
<style name="PopupWrapper" parent="@Android:style/Theme.Holo">
<item name="Android:popupMenuStyle">@style/YourPopupMenu</item>
</style>
Verweisen Sie dann in Ihrem Themenblock darauf:
<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>
Wenn Sie in der neuesten Symbolleiste in Android Studio arbeiten, finden Sie hier die kleinste Lösung. Um die Farbe der Symbolleistenoptionen-Menüs zu ändern, fügen Sie diese zu Ihrem Symbolleistenelement hinzu
app:popupTheme="@style/MyDarkToolbarStyle"
Dann definieren Sie in Ihrer styles.xml 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 und nicht Hintergrund verwenden müssen. Letzteres wird auf alles angewendet (das Menü selbst und jeder Menüpunkt), Ersteres gilt nur für das Popup-Menü.
Sie können Stile und Designs in Overflow MenuItem wie folgt anwenden. Das OverFlow-Menü ist ListView, also können wir das Design als Listenansicht anwenden.
Wenden Sie den folgenden 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 bin auch mit dem gleichen Problem betroffen, endlich habe ich eine einfache Lösung gefunden. soeben wurde der Stil der Aktionsleiste um eine Zeile erweitert.
<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 Hintergrund des Optionsmenüs zu ändern
Der schnelle Weg!
styles.xml
<style name="popupTheme" parent="Theme.AppCompat.Light">
<item name="Android:background">@color/colorBackground</item>
<item name="Android:textColor">@color/colorItem</item>
</style>
Fügen Sie dann diese spezifischen Stile zu Ihren AppTheme-Stilen hinzu
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="popupTheme">@style/popupTheme</item>
</style>
ERLEDIGT!
Ich konnte die Farbe des Aktionsüberlaufs ändern, indem ich einfach den Hex-Wert unter
<!-- 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>
Fügen Sie folgendes zu Ihrem Styles.xml
hinzu
<style name="Custom_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:itemBackground">@color/white</item>
<item name="Android:textColor">@color/colorPrimaryDark</item>
</style>
Ändern Sie das Thema nur in activity_main.xml
.
Android:theme="@style/Custom_Theme"
Versuchen Sie diesen Code. Fügen Sie dieses Snippet zu 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 unter Anwendung den folgenden Ausschnitt hinzu
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
Ich habe das benutzt und es funktioniert einwandfrei.
Wenden Sie diesen Code in der Funktion onCreate () an
val actionBar: Android.support.v7.app.ActionBar? = supportActionBar
actionBar?.setBackgroundDrawable(ColorDrawable(Color.parseColor("Your color code here")))
In Ihrem App-Design können Sie die Eigenschaft Android: itemBackground festlegen, um die Farbe des Aktionsmenüs zu ändern.
Zum Beispiel:
<style name="AppThemeDark" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/drk_colorPrimary</item>
<item name="colorPrimaryDark">@color/drk_colorPrimaryDark</item>
<item name="colorAccent">@color/drk_colorAccent</item>
<item name="actionBarStyle">@style/NoTitle</item>
<item name="windowNoTitle">true</item>
<item name="Android:textColor">@color/white</item>
<!-- THIS IS WHERE YOU CHANGE THE COLOR -->
<item name="Android:itemBackground">@color/drk_colorPrimary</item>
</style>
<style name="customTheme" parent="any_parent_theme">
<item name="Android:itemBackground">#424242</item>
<item name="Android:itemTextAppearance">@style/TextAppearance</item>
</style>
<style name="TextAppearance">
<item name="Android:textColor">#E9E2BF</item>
</style>
Nachfolgend sind die erforderlichen Änderungen in Ihrem Design zum Ändern der Hintergrundfarbe der Aktionsleiste und des Überlaufmenüs aufgeführt. Sie müssen "Android: Hintergrund" 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>