64 votes

Comment styliser les éléments de menu sur une barre d'action Android

Il y a eu de nombreuses questions sur son style sur les barres d'action, mais ceux que j'ai trouvé sont soit concernant le style des onglets, ou avoir des réponses qui ne fonctionnent pas pour moi.

La question est vraiment très simple. Je veux être en mesure de changer le style du texte (même juste de la couleur) des éléments de menu dans la barre d'action.

J'ai lu ceci: 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

Et cette question: Style une Barre d'Action dans Android Honeycomb

À partir de laquelle j'ai mis en place une application de test que j'utilise pour essayer et obtenir les éléments de menu à modifier. Il utilise toutes les valeurs par défaut pour une application créée dans l'eclipse android plugin, sauf pour ce qui suit.

Un des styles de fichier:

<?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 menu de la barre d'action:

<?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>

L'activité principale de:

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;
}
}

L'application compile et s'exécute. Le style de l'action titre de la barre de texte fonctionne parfaitement (c'est que belle nuance de rose #F0F j'ai défini). Les éléments de menu ne change pas apparaître, mais avec le style par défaut (holo de la lumière).

Ce que je fais mal ?

62voto

Chris Points 901

Je sais que cela a été demandé il y a longtemps, mais je me suis dit que je répondrais toujours. Au lieu d'avoir l'élément android:actionMenuTextAppearance sous votre style de barre d'action, déplacez-le sous le thème de votre application.

7voto

spaceMonkey Points 61

Je sais que c'est un ancien post, mais juste au cas où quelqu'un regarderait ici. J'ai ajouté ceci à mon style.xml et cela a fonctionné pour moi.

 <!-- This is the main theme parent -->
<style>
    <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>
 

5voto

Clans Points 129

Je pense que le code ci-dessous

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

doit être en MyAppTheme section.

5voto

Bryson1811 Points 31

Tu dois changer

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

à

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

ainsi que. Cela fonctionne pour moi.

3voto

jayseattle Points 64

Chris répond travaille pour moi ...

Mon fichier values-v11 / 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>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X