web-dev-qa-db-fra.com

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

Il y a eu beaucoup de questions sur le style sur les barres d'action, mais celles que j'ai trouvées concernent le style des onglets ou ont des réponses qui ne me conviennent pas.

La question est vraiment très simple. Je veux pouvoir modifier le style du texte (même juste 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 + Développeurs + Blog% 29

Et cette question: Style d'une barre d'action dans Android Honeycomb

À partir de laquelle j'ai mis au point une application de test que j'utilise pour essayer de modifier les éléments de menu. Il utilise toutes les valeurs par défaut pour une application créée dans le plug-in Eclipse Android, à l'exception des suivantes.

Un fichier de styles:

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

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 du texte du titre de la barre d’action fonctionne parfaitement (c’est cette belle nuance de rose # F0F que j’ai définie). Les éléments de menu ne changent pas mais apparaissent avec un style par défaut (holo light). 

Qu'est-ce que je fais mal ?

58
monkjack

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.

60
Chris Feist

Je sais que c'est un ancien post, mais 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 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>
5
spaceMonkey

Je pense que le code ci-dessous

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

doit être dans la section MyAppTheme.

4
Clans

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.

4
Bryson1811

J'ai fait comme ça:

<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>
2
Cabezas

Chris answer 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>
2
jayseattle

Mon hypothèse est que vous devez également styler les vues générées à partir des informations de menu de votre onCreateOptionsMenu (). Le style que vous avez appliqué jusqu'ici fonctionne, mais je doute que les éléments de menu, lorsqu'ils sont rendus avec du texte, utilisent un style identique à celui du titre de la barre d'actions.

Vous souhaiterez peut-être consulter Menu.getActionView () pour obtenir la vue de l’action de menu, puis l’ajuster en conséquence.

1
Jerry Brady

BottomNavigationView navigation = (BottomNavigationView) findViewById (R.id.navigation);

    TextView textView = (TextView) navigation.findViewById(R.id.navigation_home).findViewById(R.id.smallLabel);
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView = (TextView) navigation.findViewById(R.id.navigation_home).findViewById(R.id.largeLabel);
    textView.setTypeface(Typeface.DEFAULT_BOLD);
0
BISHWAJEET