web-dev-qa-db-fra.com

Couleur du texte ActionBar

comment puis-je changer la couleur du texte du ActionBar? J'ai hérité du thème Holo Light, je peux modifier l'arrière-plan de la barre d'action mais je ne découvre pas quel est l'attribut de Tweak pour changer la couleur du texte.


Ok, je peux modifier la couleur du texte avec l'attribut Android: textColorPrimary, mais cela change également la couleur du texte du menu déroulant affiché lorsqu'un débordement survient sur les boutons de la barre Action. Avez-vous une idée de la façon de changer la couleur de ces menus/listes?

256
rnoway

Ok, j'ai trouvé un meilleur moyen. Je suis maintenant capable de changer uniquement la couleur du titre. Vous pouvez également 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>
434
rnoway

J'ai trouvé un moyen qui fonctionne bien avec n'importe quel type de ActionBar (Sherlock, Compat et Native):

Utilisez simplement html pour définir le titre et spécifier la couleur du texte. Par exemple, pour définir la couleur du texte ActionBar sur rouge, procédez comme suit:

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 Word red. Si vous rencontrez des problèmes avec ceci, voir Android Html.fromHtml (String) ne fonctionne pas pour <font color = '#'> texte </ font> .


De plus, si vous souhaitez utiliser une ressource de couleur, ce code peut être utilisé pour obtenir la chaîne HEX correcte et en supprimant l'alpha si nécessaire (la balise font ne prend pas en charge l'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))));
93
Phil

J'avais le même problème que vous, c'est un thème Holo.Light mais je voulais styliser la couleur ActionBar, donc je devais changer la couleur du texte aussi bien que Titre et Menus. Alors à la fin, je suis allé sur git hub et j'ai examiné le code source jusqu'à ce que je trouve le style sacrément 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>

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

92
Budius

L'ID ActionBar n'est pas disponible directement, vous devez donc 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
Abhishek Chauhan

Ajoutez-le à 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, cela n'a jamais fonctionné lorsqu'il faisait partie du Widget.Styled.ActionBar; Les 2 autres attributs changent le titre et le sous-titre d'une barre d'action.

26
Nabdreas

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

actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
26
MilapTank

C'est un sujet ancien, mais pour les futurs lecteurs, utiliser ToolBar 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);
23
Masoud Dadashi

La définition d'une chaîne HTML dans la barre d'action ne fonctionne pas sur le thème Matériau dans SDK v21 +

Si vous voulez le changer, vous devez définir la couleur du 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>    
16
Koen Hendriks

Si vous souhaitez également styler le sous-titre, ajoutez-le simplement dans votre style personnalisé.

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

Les personnes qui cherchent à obtenir le même résultat pour la bibliothèque AppCompat sont les suivantes:

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

La méthode la plus simple consiste à le faire dans le fichier styles.xml.

Le modèle styles.xml de Google génère actuellement les éléments suivants:

<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 supplémentaire avant la balise de fermeture, comme indiqué, la couleur du texte sera remplacée par ce qu'elle 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 souhaitez personnaliser la couleur, vous pouvez spécifier votre propre couleur dans colors.xml ou même utiliser une couleur intégrée à partir d'Android à l'aide de 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>

Remarque: Cela modifie la couleur du titre ainsi que les titres des éléments de menu affichés dans le ActionBar.

8
Sam

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 les couleurs requises cela fonctionnera

4
Smaran

Vous avez trouvé le moyen de le faire sans créer votre propre mise en page sur API> = 21.

Il ne fera que colorier les textes et contrôler les dessins dans la barre d’action.

J'espère que ce 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>
4
reaper

Essayez d'ajouter ceci dans votre activité onCreate. 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>"));
3
onexf

De nombreuses réponses étant obsolètes, je vais mettre à jour le fil de discussion et montrer comment changer la couleur du texte et la couleur d'arrière-plan dans ActionBar (barre d'outils) et dans le menu contextuel ActionBar.

La dernière approche d'Android (à compter de mai 2018) concernant l'utilisation de la barre d'action (barre d'outils) consiste à utiliser le thème avec NoActionBar et à utiliser plutôt la barre d'outils.

alors voici ce dont vous avez besoin:

  1. Dans Activity (qui étend AppCompatActivity), déclarez Toolbar:

    Toolbar myToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);
    
  2. Ajouter une barre d'outils dans le fichier XML de mise en page de l'activité. Ici, nous allons définir notre coutume (thèmes écrasés), notez Android:theme="@style/ThemeOverlay.AppTheme.ActionBar" et app:popupTheme="@style/ThemeOverlay.AppTheme.PopupMenu", ils feront l'affaire.

    <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 votre fichier styles.xml, vous devrez écraser 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 gars

p.s. si vous me demandez, je dirais: OUI, tout ce thème est un sacré bordel.

3
Kirill Karmazin

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 l'utiliser juste nourrir votre barre d'action et la nouvelle couleur à savoir

ActionBar actionBar = getActionBar();    // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
3
365SplendidSuns

Essayez 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, espérons pouvoir 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
BoBoMEe

Une solution intéressante consiste à utiliser un SpannableStringBuilder et à définir 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 support.

Voir Android: Coloration d'une partie d'une chaîne à l'aide de TextView.setText ()?

0
Maciej Swic

vous pouvez changer la couleur de n'importe quel texte en utilisant html <font> attribut directement dans les fichiers xml . par exemple dans strings.xml:

<resources>
    <string name = "app_name">
        <html><font color="#001aff">Multi</font></html>
        <html><font color="#ff0044">color</font></html>
        <html><font color="#e9c309">Text </font></html>
    </string>
</resources>

 enter image description here

0
hofs

Ce n'est pas la solution recommandée car je vais ici dans Android apis mais comme mon application nécessite de changer le thème de manière dynmiquement sur des conditions xml pas possibles ici, donc je dois le faire Mais cette solution fonctionne très bien.

Solution:--

 /**
 * 
 * @author Kailash Dabhi
 * @email [email protected]
 *
 */ 
 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
Kailash Dabhi

Pour Android 5 (Lollipop), vous devrez utiliser Android: actionBarPopupTheme pour définir le paramètre textColor du menu de débordement.

0
m02ph3u5