ActionBar la couleur du texte

comment changer la couleur du texte de la barre D'action? J'ai hérité du thème Holo Light, je suis capable de changer le fond de la barre D'action mais je ne trouve pas quel est l'attribut à modifier pour changer la couleur du texte.


Ok, je suis capable de changer la couleur du texte avec l'attribut android:textColorPrimary mais il modifie également la couleur du texte du menu déroulant affiché lorsqu'un débordement se produit sur les boutons de la barre d'action. Une idée de comment changer la couleur de ces menu / Liste ?

251
demandé sur Ravi Rupareliya 2011-05-02 23:39:40

19 réponses

Ok, j'ai trouvé un meilleur moyen. Je suis maintenant en mesure de seulement changer la couleur du titre. Vous pouvez aussi modifier le sous-titre.

Voici mes styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
  <style name="MyTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyTheme.ActionBarStyle</item>
  </style>

  <style name="MyTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
    <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
  </style>

  <style name="MyTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">@color/red</item>
  </style>
</resources>
428
répondu rnoway 2015-08-14 19:58:19

j'avais le même problème que toi, C'est un Holo.Thème léger mais je voulais styliser la couleur ActionBar, donc j'ai dû changer la couleur du texte ainsi que le titre et les Menus. Donc à la fin je suis allé à git hub et j'ai regardé le code source jusqu'à ce que je trouve le fichu style correct:

<?xml version="1.0" encoding="utf-8"?>
<!-- For honeycomb and up -->
<resources>

    <style name="myTheme" parent="@android:style/Theme.Holo.Light">
        <item name="android:actionBarStyle">@style/myTheme.ActionBar</item>
        <item name="android:actionMenuTextColor">@color/actionBarText</item>
    </style>

    <style name="myTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">@drawable/actionbarbground</item>
        <item name="android:titleTextStyle">@style/myTheme.ActionBar.Text</item>
    </style>

    <style name="myTheme.ActionBar.Text" parent="@android:style/TextAppearance">
        <item name="android:textColor">@color/actionBarText</item>
    </style>

</resources>

donc maintenant tout ce que vous avez à faire est de définir ce que vous voulez @color/actionBarText et @drawable/actionbarbground !

91
répondu Budius 2014-09-17 07:13:51

j'ai trouvé une façon qui fonctionne bien avec n'importe quelle saveur de ActionBar ( Sherlock , Compat , et Native ):

il suffit d'utiliser html pour définir le titre, et spécifier la couleur du texte. Par exemple, pour définir la ActionBar couleur du texte en rouge, faites simplement ceci:

getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));

vous pouvez également utiliser le code hexadécimal rouge #FF0000 au lieu de le mot red . Si vous avez des problèmes avec cela, voir Android Html.fromHtml(String) ne fonctionne pas texte .


de plus, si vous voulez utiliser une ressource en couleur, ce code peut être utilisé pour obtenir la chaîne hexadécimale correcte, et supprimer l'alpha si nécessaire (la font tag does not support alpha):

int orange = getResources().getColor(R.color.orange);
String htmlColor = String.format(Locale.US, "#%06X", (0xFFFFFF & Color.argb(0, Color.red(orange), Color.green(orange), Color.blue(orange))));
90
répondu Phil 2017-05-23 11:55:07

L'ID ActionBar N'est pas disponible directement, donc vous devez faire un peu de piratage ici.

int actionBarTitleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
if (actionBarTitleId > 0) {
    TextView title = (TextView) findViewById(actionBarTitleId);
    if (title != null) {
        title.setTextColor(Color.RED);
    }
}
66
répondu Abhishek Chauhan 2013-07-06 21:19:17

j'ai fait avec un simple code d'une ligne

actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
25
répondu MilapTank 2014-07-22 14:06:34

Ajouter à la racine de la barre d'action. J'ai eu ce problème.

<style name="ActionBar" parent="@style/Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="actionMenuTextColor">@color/stdDarkBlueText</item>
</style>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>

<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/stdDarkBlueText</item>
    <item name="android:textSize">12sp</item>
</style>

<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
    <item name="android:textColor">@color/stdDarkBlueText</item>
    <item name="android:textSize">12sp</item>
</style>

actionMenuTextColor - change la couleur du texte pour le texte de la barre d'action, il n'a jamais fonctionné quand il faisait partie du Widget.Styled.ActionBar , donc j'ai dû l'ajouter à la racine. Autres 2 attributs changent le titre et le sous-titre d'une barre d'action.

24
répondu Nabdreas 2017-01-17 23:23:17

c'est un vieux sujet mais pour les futurs lecteurs, L'utilisation de barre D'outils rend tout très facile:

Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
17
répondu Masoud Dadashi 2017-11-21 00:09:03

mettre une chaîne HTML sur la barre d'action ne fonctionne pas sur le thème matériel dans SDK v21+

Si vous voulez le changer, vous devez définir la couleur de texte primaire dans votre style.xml

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="android:Theme.Material.Light">
        <!-- Customize your theme here. -->
        <item name="android:textColorPrimary">@color/actionbar-text-color</item>
    </style>
</resources>    
15
répondu Koen Hendriks 2014-12-18 13:15:15

si vous voulez style le sous-titre aussi alors il suffit d'ajouter cela dans votre style personnalisé.

<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>

personnes qui cherchent à obtenir le même résultat pour AppCompat bibliothèque alors c'est ce que j'ai utilisé:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/MyActionBar</item>
        <item name="actionBarStyle">@style/MyActionBar</item>
        <!-- other activity and action bar styles here -->
    </style>

    <!-- style for the action bar backgrounds -->
    <style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:background">@drawable/actionbar_background</item>
        <item name="background">@drawable/actionbar_background</item>
        <item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
        <item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
     </style>
    <style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
        <item name="android:textColor">@color/color_title</item>
      </style>
</resources>
12
répondu Tarun 2013-12-03 05:35:23

la façon la plus simple est de le faire dans les styles.XML.

les styles de modèles de Google.xml génère actuellement ce qui suit:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

si vous ajoutez une ligne de plus avant la balise de fermeture, comme montré, qui va changer la couleur du texte à ce qu'il devrait être avec une barre D'action sombre:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

si vous voulez personnaliser la couleur à autre chose, vous pouvez soit spécifier votre propre couleur dans les couleurs.xml ou même utiliser une couleur intégrée D'Android en utilisant l'attribut android:textColorPrimary:

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>


<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">@android:color/darker_gray</item>
</style>

Note: cela change la couleur du titre ainsi que les titres des MenuItems affichés dans la barre D'action.

8
répondu Sam 2017-01-03 19:14:25

C'est la solution que j'ai utilisée après avoir vérifié toutes les réponses

<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorAccent">@color/Button_color</item>
    <item name="android:editTextStyle">@style/EditTextStyle</item>
    <item name="android:typeface">monospace</item>
    <item name="android:windowActionBar">true</item>
    <item name="colorPrimary">@color/Title_Bar_Color</item>
    <item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
    <item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>

</style>

<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>

<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
    <item name="titleTextStyle">@style/ActionBarTitleText</item>
    <item name="android:background">@color/Title_Bar_Color</item>
    <item name="background">@color/Title_Bar_Color</item>
    <item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>

<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
    <item name="android:textColor">@color/solid_white</item>
    <item name="android:textSize">12sp</item>
</style>

<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
    <item name="android:textColor">@color/solid_white</item>
    <item name="android:textSize">12sp</item>
</style>

Changer le nécessaire couleurs elle travaillera

4
répondu Smaran 2015-11-03 09:49:04

a trouvé le moyen de le faire correctement sans créer votre propre layout sur API >= 21.

il ne coloriera que les textes et contrôlera les tirages à l'intérieur de la barre d'action.

Espérons qu'il sera utile pour quelqu'un.

<!--Material design primary colors-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
    <item name="android:navigationBarColor">@color/primary_dark</item>
    <item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item>
</style>

<!--Action bar-->
<style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid">
    <item name="android:textColorPrimary">@color/action_bar_text</item>
    <item name="colorControlNormal">@color/action_bar_text</item>
</style>
3
répondu reaper 2015-02-18 07:28:34

cette fonction fonctionne bien

private void setActionbarTextColor(ActionBar actBar, int color) {

    String title = actBar.getTitle().toString();
    Spannable spannablerTitle = new SpannableString(title);
    spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    actBar.setTitle(spannablerTitle);

}

puis de l'utiliser il suffit de l'alimenter votre barre d'action et la nouvelle couleur ie

ActionBar actionBar = getActionBar();    // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
3
répondu 365SplendidSuns 2015-11-19 12:52:33

essayer beaucoup de méthodes, dans la version basse de L'API,une méthode réalisable est <item name="actionMenuTextColor">@color/your_color</item> et n'utilisez pas L'espace de noms Android, hope peut vous aider""

ps:

  <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionMenuTextColor">@color/actionMenuTextColor</item>
</style>
2
répondu BoBoMEe 2015-12-14 12:36:14

essayez d'ajouter ceci dans l'onCreate de votre activité. Fonctionne sur presque toutes les versions Android.

 actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));  

ou

getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
2
répondu onexf 2016-10-14 05:25:52

beaucoup de réponses sont dépréciées donc je vais mettre à jour le thread et montrer comment changer la couleur du texte et la couleur de fond sur la barre D'outils (ActionBar) et dans le menu pop up.

la dernière approche dans Android (à partir de mai 2018) dans le travail avec la barre d'Action (barre d'outils) est d'utiliser le thème avec NoActionBar et utiliser la barre d'outils à la place.

alors voici ce dont vous avez besoin:

  1. en activité (qui s'étend AppCompatActivity) déclarer la Barre d'outils:

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
    
  2. ajouter barre d'outils dans la mise en page xml de l'activité. Ici, nous allons définir notre coutume (thèmes réécrits), note android:theme="@style/ThemeOverlay.AppTheme.ActionBar" et app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu" , ils vont faire le tour.

    <android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:theme="@style/ThemeOverlay.AppTheme.ActionBar"
    app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu"
    app:layout_constraintTop_toTopOf="parent" />
    
  3. dans vos styles.vous devrez réécrire ces deux styles pour définir des couleurs personnalisées:

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionBarTheme">@style/ThemeOverlay.AppTheme.ActionBar</item>
    <item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
    </style>
    
    <style name="ThemeOverlay.AppTheme.ActionBar" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:textColorPrimary">@color/action_bar_text_color</item>
    <item name="android:background">@color/action_bar_bg_color</item>
    </style>
    
    <style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="android:background">@color/popup_bg_color</item>
    <item name="android:textColorPrimary">@color/popup_text_color</item>
    </style>
    

c'est ça les gens

p. S. si vous me le demandez, je dirais: oui, toute cette histoire de thème est un sacré bordel.

1
répondu Kirill Karmazin 2018-05-14 21:29:01

une bonne solution est d'utiliser un SpannableStringBuilder et régler la couleur de cette façon. Vous pouvez même utiliser différentes couleurs sur différentes parties de la chaîne, ajouter des images, etc.

Testé avec la nouvelle bibliothèque de soutien.

voir Android: colorer une partie d'une chaîne de caractères en utilisant TextView.setText ()?

0
répondu Maciej Swic 2017-05-23 12:03:08

ce n'est pas la solution recommandée car je vais dans APIs android ici, mais comme mon application nécessite de changer le thème dynmically sur les conditions xml pas possible ici, donc je dois le faire. Mais Cette solution est de travail très agréable.

Solution:--

 /**
 * 
 * @author Kailash Dabhi
 * @email kailash09dabhi@gmail.com
 *
 */ 
 public static void setActionbarTextColor(Activity activity, int color) {
    Field mActionViewField;
    try {
        mActionViewField = activity.getActionBar().getClass()
                .getDeclaredField("mActionView");
        mActionViewField.setAccessible(true);
        Object mActionViewObj = mActionViewField.get(activity
                .getActionBar());

        Field mTitleViewField = mActionViewObj.getClass().getDeclaredField(
                "mTitleView");
        mTitleViewField.setAccessible(true);
        Object mTitleViewObj = mTitleViewField.get(mActionViewObj);

        TextView mActionBarTitle = (TextView) mTitleViewObj;
        mActionBarTitle.setTextColor(color);
        // Log.i("field", mActionViewObj.getClass().getName());
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    }

}
0
répondu Kailash Dabhi 2015-02-18 08:03:07

pour Android 5 (lollipop), vous devrez utiliser android:actionBarPopupTheme pour définir le textColor pour le menu overflow.

0
répondu m02ph3u5 2015-03-03 11:29:21