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)
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:
-
Cambiar
android:background="?attr/colorPrimary"
aandroid: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. -
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.