2011-05-20 9 views
54

Ha habido muchas preguntas sobre el estilo en las barras de acciones, pero las que he encontrado están relacionadas con el diseño de las pestañas o tienen respuestas que no me funcionan.Cómo personalizar los elementos del menú en una barra de acción de Android

La pregunta es realmente bastante simple. Quiero poder cambiar el estilo del texto (incluso solo el color) de los elementos del menú en la barra de acciones.

He leído esto: http://android-developers.blogspot.com/2011/04/customizing-action-bar.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FhsDu+%28Android+Developers+Blog%29

Y esta pregunta: Style an Action Bar in Android Honeycomb

Desde que he puesto juntos una aplicación de prueba que estoy usando para tratar de obtener los elementos de menú para cambiar. Utiliza todos los valores predeterminados para una aplicación creada en el complemento Eclipse de Android, a excepción de lo siguiente. presentar

estilos

A:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<style name="MyAppTheme" parent="@android:style/Theme.Holo.Light"> 
    <item name="android:actionBarStyle">@style/MyActionBar</item> 
</style> 

<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar"> 
    <item name="android:titleTextStyle">@style/MyActionBar.TitleTextStyle</item> 
    <item name="android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item> 
</style> 

<style name="MyActionBar.TitleTextStyle" 
    parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:textColor">#F0F</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textSize">24dip</item> 
</style> 

<style name="MyActionBar.MenuTextStyle" 
    parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:textColor">#F0F</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textSize">24dip</item> 
</style> 
</resources> 

Un menú de la barra de acción:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 

<item android:showAsAction="always|withText" android:icon="@android:drawable/ic_menu_edit" 
    android:id="@+id/menu_item1" android:title="menu_item1"></item> 

<item android:showAsAction="always|withText" android:icon="@android:drawable/ic_menu_edit" 
    android:id="@+id/menu_item2" android:title="menu_item2"></item> 

</menu> 

La actividad principal:

public class Main extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
} 

/** 
* Create the options menu that is shown on the action bar 
*/ 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
} 
} 

La aplicación se compila y ejecuta. El estilo del texto del título de la barra de acción funciona a la perfección (es ese hermoso tono rosado # F0F que he definido). Los elementos del menú no cambian pero aparecen con un estilo predeterminado (holo light).

¿Qué estoy haciendo mal?

Respuesta

56

En lugar de tener el elemento android:actionMenuTextAppearance bajo el estilo de su barra de acción, muévalo bajo el tema de su aplicación.

+2

gracias, eres genial, – tasomaniac

+3

no funciona para mí :( solo se usa primaryTextColor ... pero esa no es una solución correcta – redestructa

+1

gracias, ¡respuesta perfecta! –

1

Supongo que también debe aplicar estilo a las vistas que se generan a partir de la información del menú en su onCreateOptionsMenu(). El estilo que aplicó hasta ahora está funcionando, pero dudo que los elementos del menú, cuando se representan con texto, usen un estilo que sea el mismo que el de la barra de ActionBar.

Es posible que desee ver Menu.getActionView() para obtener la vista de la acción del menú y luego ajustarla en consecuencia.

4

creo que el código de abajo

<item name="android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item> 

debe estar en MyAppTheme sección.

+1

sin impacto alguno – Taranfx

+0

es muy útil, estaba intentando lo mismo pero no funcionó. Funcionó bien cuando se aplica en MyAppTheme. – Narendra

3

usted tiene que cambiar

<style name="MyActionBar.MenuTextStyle" 
parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 

a

<style name="MyActionBar.MenuTextStyle" 
parent="android:style/TextAppearance.Holo.Widget.ActionBar.Menu"> 

también. Esto funciona para mí

5

Sé que es una publicación anterior, pero por si acaso alguien está buscando aquí. Agregué esto a mi style.xml y funcionó para mí.

<!-- This is the main theme parent --> 
<style name="MyTabStyle"> 
    <item name="android:actionBarTabTextStyle">@style/MyTabTextStyle</item> 
</style> 

<style name="MyTabTextStyle" parent="@android:style/Widget.ActionBar.TabText"> 
    <item name="android:textAppearance">@android:style/TextAppearance.Medium</item> 
    <item name="android:textSize">14sp</item> 
    <item name="android:textStyle">bold</item> 
    <item name="android:textColor">@color/pressed_skylogtheme</item> 
</style> 
2

Chris respuesta está funcionando para mí ...

Mi valores-v11/archivo styles.xml:

<resources> 
<style name="LightThemeSelector" parent="android:Theme.Holo.Light.DarkActionBar"> 
    <item name="android:actionBarStyle">@style/ActionBar</item> 
    <item name="android:editTextBackground">@drawable/edit_text_holo_light</item> 
    <item name="android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item> 
</style> 

<!--sets the point size to the menu item(s) in the upper right of action bar--> 
<style name="MyActionBar.MenuTextStyle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title"> 
    <item name="android:textSize">25sp</item> 
</style> 

<!-- sets the background of the actionbar to a PNG file in my drawable folder. 
displayOptions unset allow me to NOT SHOW the application icon and application name in the upper left of the action bar--> 
<style name="ActionBar" parent="@android:style/Widget.Holo.ActionBar"> 
    <item name="android:background">@drawable/actionbar_background</item> 
    <item name="android:displayOptions"></item> 
</style> 

<style name="inputfield" parent="android:Theme.Holo.Light"> 
    <item name="android:textColor">@color/red2</item> 
</style> 
</resources> 
+3

Esto funciona para mí para el tamaño del texto ... pero no para el color. ¡Qué raro es eso! –

1

lo hice de esta manera:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="actionMenuTextAppearance">@style/MenuTextAppearance</item> 
    <item name="android:actionMenuTextAppearance">@style/MenuTextAppearance</item> 
    <item name="actionMenuTextColor">@color/colorAccent</item> 
</style> 

<style name="MenuTextAppearance" > 
    <item name="android:textAppearance">@android:style/TextAppearance.Large</item> 
    <item name="android:textSize">20sp</item> 
    <item name="android:textStyle">bold</item> 
</style> 
Cuestiones relacionadas