Establecer el color de fondo del elemento de menú en el botón de desplazamiento en Android

Tengo elementos de menú en mi aplicación, y me gustaría cambiar el color del fondo del artículo, cuando se hace clic (por favor, ver la captura de pantalla – elemento 1 se hace clic)

Se hace clic en el elemento 1

Sólo quiero un color aquí – ya sea azul claro, u oscuro. Sin embargo, como usted puede ver, hay dos de ellos en el primer artículo.

Aquí está mi código:

Barra de herramientas en la actividad:

<android.support.v7.widget.Toolbar xmlns:sothree="http://schemas.android.com/apk/res-auto" xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/main_toolbar" sothree:theme="@style/MyActionBar" android:layout_alignParentTop="true" style="@style/toolbarButton"> ... </android.support.v7.widget.Toolbar> 

Estilos:

  <style name="toolbarButton"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:clickable">true</item> </style> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:background">@color/material_dark_blue</item> <item name="android:displayOptions">showHome|homeAsUp|showTitle</item> <item name="android:icon">@android:color/transparent</item> <item name="android:centerX">@android:integer/config_shortAnimTime</item> <item name="windowActionBar">false</item> </style> <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:textColor">@color/material_white</item> <item name="android:popupMenuStyle">@style/CustomOverflowBack</item> <item name="android:itemTextAppearance">@android:color/white</item> </style> 

Manifiesto:

 <application android:name=".MyApplication" android:allowBackup="true" android:hardwareAccelerated="false" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/AppTheme"> 

Cualquier ayuda es muy apreciada.

UPDATE: Agregar CustomOverflowBack :

  <style name="CustomOverflowBack" parent="@android:style/Widget.Holo.Light.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_item</item> </style> 

Menu_item.xml

 <?xml version="1.0" encoding="UTF-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/listview_background_shape"> <stroke android:width="1dp" android:color="@color/material_dark_blue" /> <solid android:color="@color/actionbar_item_bg_color" /> </shape> 

Reemplazar esto

 <style name="toolbarButton"> <item name="android:layout_width">match_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:clickable">true</item> </style> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:background">@color/material_dark_blue</item> <item name="android:displayOptions">showHome|homeAsUp|showTitle</item> <item name="android:icon">@android:color/transparent</item> <item name="android:centerX">@android:integer/config_shortAnimTime</item> <item name="windowActionBar">false</item> </style> <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="android:textColor">@color/material_white</item> <item name="android:popupMenuStyle">@style/CustomOverflowBack</item> <item name="android:itemTextAppearance">@android:color/white</item> </style> <style name="CustomOverflowBack" parent="@android:style/Widget.Holo.Light.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_item</item> </style> 

Con este:

 <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> <item name="actionBarPopupTheme">@style/AppThemeOverlay.Popup</item> </style> <style name="AppThemeOverlay.Popup" parent="ThemeOverlay.AppCompat.Dark"> <item name="android:colorBackground">popup menu background color</item> <item name="colorControlHighlight">selected item color</item> </style> 

Así es como lo usas:

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?actionBarSize" android:background="?colorPrimary" android:elevation="4dp" app:popupTheme="?actionBarPopupTheme"/> 

Lo anterior es suficiente para que funcione en API 21 y superiores.

Dejé de lado tu estilo toolbarButton porque no está relacionado con el problema.

Aquí hay algunas pistas

 <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> 

No utilice estilos de plataforma para widgets de AppCompat. Si utilizó AppCompat style @style/Widget.AppCompat.ActionBar tendría que sustituir prácticamente ninguno de los atributos.

 <item name="android:background">@color/material_dark_blue</item> 

El fondo de un tema se aplicará a cualquier vista que no la anule. Por eso ves el cuadrado azul. android:background es un atributo de estilo , lo usa en widgets. android:colorBackground es un atributo del tema y se utiliza (entre otras cosas) para colorear el android:popupBackground , que proporciona la forma de un menú emergente.

 <item name="android:textColor">@color/material_white</item> 

El color de texto es más un atributo de estilo utilizado en TextViews. Los atributos de tema ampliamente utilizados son android:textColorPrimary y android:textColorSecondary . Utilice ésos en lugar de otro. android:textColor en un tema puede producir resultados inesperados / no deseados.

 <item name="android:itemTextAppearance">@android:color/white</item> 

NO coloque un recurso de color en un atributo de aspecto de estilo / texto. No funcionará o se bloqueará o peor producirá resultados inesperados sin estrellarse.

@ Tom11 usted tendrá que declarar un estilo personalizado para usted superposición de popup de la barra de herramientas.

Crear un estilo extendiendo ThemeOverlay:

 <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"> <item name="android:colorBackground">@color/colorPrimaryDark</item> <item name="colorControlHighlight">@color/colorAccent</item> </style> 

En el estilo anterior reemplace @ color / colorPrimaryDark con su color de fondo y @ color / colorAccent con el color de fondo seleccionado.

A continuación, utilícelo en su declaración de barra de herramientas.

 <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" style="@style/toolbarButton" app:popupTheme="@style/AppTheme.PopupOverlay"/> 

Esto solucionará el problema.

Actualización: Realice los siguientes cambios:

  1. Cambiar android:background="?attr/colorPrimary" a android:background="@color/material_dark_blue" con el color de fondo de la barra de acción en el elemento de la barra de herramientas anterior.

  2. Eliminar <item name="android:background">@color/material_dark_blue</item> de su estilo MyActionBar.

Por lo tanto, el código actualizado para la barra de herramientas y el estilo de MyActionBar será el siguiente:

  <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/material_dark_blue" style="@style/toolbarButton" app:popupTheme="@style/AppTheme.PopupOverlay" app:theme="@style/MyActionBar"/> <style name="MyActionBar" parent="Widget.AppCompat.ActionBar"> <item name="android:displayOptions">showHome|homeAsUp|showTitle</item> <item name="android:icon">@android:color/transparent</item> <item name="android:centerX">@android:integer/config_shortAnimTime</item> <item name="windowActionBar">false</item> </style> 

Esto finalmente debería funcionar.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.