web-dev-qa-db-fra.com

Changer la couleur de l'élément de menu de la barre d'outils (action non masquée)

Disons que j'ai un menu (options_menu.xml) semblable au suivant:

<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
      xmlns:app="http://schemas.Android.com/apk/res-auto" >
    <item Android:id="@+id/action_login"
          Android:title="Login"
          app:showAsAction="always"/>
</menu>

que je gonfle dans le nouvel élément de la barre d'outils

mToolbar.inflateMenu(R.menu.options_home);

Cela se traduit par quelque chose comme 

enter image description here

Existe-t-il un moyen de changer cette couleur de texte sans en utilisant une image, en modifiant le reste de la couleur du texte de la barre d'outils ou en ajoutant une vue personnalisée à la barre d'outils? Vous cherchez une réponse pour minSdk 15 (appcompat).

Mettre à jour:

Mon style pertinent:

<style name="AppTheme" parent="AppTheme.Base">
    <item name="actionMenuTextColor">@color/ww_red</item>
</style>

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/red</item>
    <item name="colorAccent">@color/theme_accent</item>

    <item name="Android:textColor">@color/text_dark</item>

    <item name="Android:colorEdgeEffect">@color/gray</item>
</style>
38
loeschg

Dans votre fichier de thème, vous devez mettre ceci:

<style name="AppTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
         ...
    <item name="actionMenuTextColor">@color/text_color</item>
         ...
</style>

et appliquez ce thème à votre vue Barre d’outils comme ceci:

<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/res/Android"
   xmlns:app="http://schemas.Android.com/apk/res-auto"
   Android:id="@+id/main_toolbar"
   Android:layout_width="match_parent"
   Android:layout_height="?attr/actionBarSize"
   Android:background="?attr/colorPrimary"
   Android:layout_gravity="top"
   app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
   Android:theme="@style/AppTheme.ActionBar"/>

Android: theme = "@ style/AppTheme.ActionBar" n'oubliez pas cette ligne dans votre barre d'outils

116
koni

Pour moi, cela a fonctionné: Réglage de "Android: textColor"

<style name="AppTheme.ActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        ...
        <!--This would set the menu item color-->
        <item name="Android:textColor">#000</item>
        ...
 </style>
8
ayz4sci

dans votre fichier de style, placez ce qui suit: 

    <style name="MyAppTheme" parent="@Android:style/Theme.Holo.Light">
        <item name="Android:actionBarStyle">@style/MyActionBar</item>
        <item name="Android:titleTextStyle">@style/MyActionBar.TitleTextStyle 
        <item name="Android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item>
        <item name="Android:actionMenuTextColor">@color/action_bar_red</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.Menu">
        <item name="Android:textColor">#F0F</item>
        <item name="Android:textStyle">bold</item>
        <item name="Android:textSize">24dip</item>
    </style>


Vous pouvez modifier les éléments de style ci-dessus en fonction de vos besoins. Je n'ai cependant pas ajouté de style distinct pour la couleur. Comme vous pouvez le constater, je lui assigne simplement une couleur rouge (que j’ai déclarée dans mon fichier de couleurs). Vous pouvez changer au besoin.

6
Saurabh Rajpal

Vous ne savez pas si vous pouvez définir des arrière-plans spécifiques pour séparer les MenuItems uniquement par le biais du style, mais vous pouvez simplement setActionView pour votre MenuItem

Commencez par créer une mise en page telle que item_av.xml:

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:background="#FF0000"
    Android:padding="5dp">
    <TextView
        Android:text="LOGIN"
        Android:layout_width="wrap_content"
        Android:layout_height="match_parent"
        Android:textSize="12sp"
        Android:gravity="center"/>
</LinearLayout>

Puis définissez-le sur MenuItem dans onCreateOptionsMenu:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_main, menu);

    MenuItem item = menu.findItem(R.id.action_login);
    item.setActionView(R.layout.item_av);

    return true;
}
3
Simas

pour changer la couleur du texte d'un élément de menu, utilisez le code ci-dessous

<style name="AppToolbar" parent="Theme.AppCompat.Light.NoActionBar">
<item name="Android:itemTextAppearance">@style/menu_item_color</item>
</style>

<style name="menu_item_color">
<item name="Android:textColor">@color/app_font_color</item>
</style>
1
Muhammad Abdullah

Vous pouvez le faire par programme comme ça:

private AppCompatButton menuTextView; 

void initToolbar(){
    toolbar.inflateMenu(R.menu.your_menu);
    menuTextView = AppCompatButton(context);
    menuTextView.setTextColor(ContextCompat.getColor(
    getContext(), R.color.your_color));
    TypedValue outValue = new TypedValue();
    getContext().getTheme().resolveAttribute(
        R.attr.selectableItemBackgroundBorderless,
        outValue,
        true
    )
 toolbar.getMenu().getItem(0).setActionView(menuTextView);
1
Aleksey Reyngardt

Ajoutez cette ligne à votre thème de base dans style.xml:

<item name="Android:actionMenuTextColor">@color/yourColor</item>
0
Naimish Vinchhi