Я'd, как изменить цвет фона опции (меню) в Android 4.2. Я пробовал все методы, но он по-прежнему показывает цвет по умолчанию задается тема. Я использовал следующий код & с XML-конфигами.
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>
Выше setMenuBackground не принимая никакого эффекта:
<ИМГ СРЦ=с"http://i.stack.imgur.com/xFlzp.png" ширина=то"240" и в alt="и примерное меню на">
На картинке выше, я хочу изменить фон в меню с черного на синий цвет в панели действий. Как я могу добиться этого, и что я сделал не так?
На панель действий тип генератора, полагают Солнечный, является очень полезным, но он генерирует большое файлов, большинство из которых не имеют значения, если вы только хотите изменить цвет фона.
Но я копнул глубже в молнии, которую он генерирует, и попытался сузить что самое важное, так что я могу сделать минимальное количество изменений, чтобы мое приложение. Ниже то, что я узнал.
В генераторе стиль, соответствующий параметр всплывающие цвет, который влияет на "меню переполнения, подменю и вертушка панель фон и".
Пойти дальше и создать молнию, но из всех созданных файлов, вы только действительно нужно одно изображение, menu_dropdown_panel_example.9.ПНГ
, который выглядит примерно так:
Итак, добавить различные варианты решения его в РЭС/холст-*. (И, возможно, переименовать их для
menu_dropdown_panel.9.ПНГ`.)
Затем, в качестве примера, в res/values/themes.xml-вы бы следующее, с андроид:popupMenuStyle
и андроид:popupBackground
ключевое параметры.
<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>
И, конечно, в AndroidManifest.xml`:
<application
android:theme="@style/MyAppActionBarTheme"
... >
Что вы получаете с этой установки:
Обратите внимание, что я'м через тема.Холо.Света
в качестве базовой темы. Если вы используете тема.Холо
(Холо), там'ы дополнительные действия нужны как этот ответ описывает!
Также, если вы (как и я) хотели, чтобы стиль всей панели действий, а не только в меню, поставить что-то подобное в 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>
Работает отлично, по крайней мере на Android 4.0+ (уровень API 14+).
В случае, если люди до сих пор посетить рабочее решение, вот то, что работал для меня: - это библиотека для поддержки совместимости приложений. Это в продолжение к верхней панели стайлинг объяснены здесь
Следующий файл 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>
и вот как это выглядит--пункт меню Цвет фона голубой, а текст пункта цвет розовый с параметр textSize как 25sp:--
Есть простой способ, чтобы изменить цвета в верхней панели Используйте генератор панели быстрого доступа и копировать вставить все файлы в папке " Рес " и изменение темы в Android.файл манифеста.
Если Вы читаете это, Это's наверное потому, что все предыдущие ответы не't работа для вашего Холо тему.
Холо темный использует дополнительную оболочку для PopupMenus, поэтому после делать что Jonik предложил, вы должны добавить следующий стиль для ваших 'в формате XML' файл:
<style name="PopupWrapper" parent="@android:style/Theme.Holo">
<item name="android:popupMenuStyle">@style/YourPopupMenu</item>
</style>
Затем ссылку на него в вашей теме блока:
<style name="Your.cool.Theme" parent="@android:style/Theme.Holo">
.
.
.
<item name="android:actionBarWidgetTheme">@style/PopupWrapper</item>
</style>
Что's это!
Мой простой трюк, чтобы изменить цвет фона и цвет текста в меню Меню /
<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>
В случае, если вы работаете в последней версии панели инструментов в Android Studio и вот это самое компактное решение Чтобы изменить меню "Параметры" панели инструментов цвет, добавьте в элемент панели инструментов
app:popupTheme="@style/MyDarkToolbarStyle"
Затем в styles.xml определить стиль всплывающего меню
в <имя стиля="и MyDarkToolbarStyle и" родитель="и ThemeOverlay.Совместимости приложений.Световой"> <название товара="на Андроид:colorBackground" и> цвет@/mtrl_white_100</п> <название товара="на Андроид:свойства textColor" и> цвет@/mtrl_light_blue_900</п> </стиль и GT;
Обратите внимание, что вы должны использовать colorBackground не фон. Последний будет применяться ко всему (само меню и каждый пункт меню), бывший распространяется только на меню.
Я'м поражен с этой же проблемой, наконец-то я нашел простое решение. просто добавил одну строку к действию баре.
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@color/colorAccent</item>
<item name="android:colorBackground">@color/colorAppWhite</item>
</style>
на"Андроид:colorBackground и" достаточно, чтобы изменить меню фон
Быстрый способ!
styles.xml
<style name="popupTheme" parent="Theme.AppCompat.Light">
<item name="android:background">@color/colorBackground</item>
<item name="android:textColor">@color/colorItem</item>
</style>
Затем добавить определенные стили для вашего AppTheme стили
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="popupTheme">@style/popupTheme</item>
</style>
Молодец!
Вы можете применять стили и темы в меню переполнения согласно ниже. Меню-это элемент управления ListView таким образом, мы можем применить тему согласно списка.
Применить ниже код в styles.xml
<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>
Я был в состоянии изменить цвет действий переполнения, просто надев на шестнадцатеричное значение:
<!-- 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>
В вашей теме Приложение можно установить на Андроид:собственность itemBackground, чтобы изменить цвет меню "Действие".
Например:
в
<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>
в
Добавьте следующий код в Styles.xml
<style name="Custom_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:itemBackground">@color/white</item>
<item name="android:textColor">@color/colorPrimaryDark</item>
</style>
Тема изменения в activity_main.xml только`.
android:theme="@style/Custom_Theme"
Попробуйте этот код. Добавьте этот фрагмент в свой РЭС>ценности>styles.xml
<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>
И в Manifest.xml добавить ниже фрагмент под приложения
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
Я использовал это, и это работает просто отлично.
Примените этот код в onCreate() функции
val actionBar: android.support.v7.app.ActionBar? = supportActionBar
actionBar?.setBackgroundDrawable(ColorDrawable(Color.parseColor("Your color code here")))
<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>
Следующие изменения необходимы в вашей теме для изменения панели действий & переполнение меню Цвет фона. Вам нужно настроить на "Андроид:фон" из actionBarStyle & popupMenuStyle
<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>