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
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>
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
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>
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.
Vous ne savez pas si vous pouvez définir des arrière-plans spécifiques pour séparer les MenuItem
s 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;
}
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>
où
<style name="menu_item_color">
<item name="Android:textColor">@color/app_font_color</item>
</style>
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);
Ajoutez cette ligne à votre thème de base dans style.xml:
<item name="Android:actionMenuTextColor">@color/yourColor</item>