308 votes

Couleur du Texte

comment puis-je changer la couleur du texte de l'ActionBar? J'ai hérité du Thème Holo Light, je suis capable de changer l'arrière-plan de l'ActionBar mais je ne sais 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 cela change aussi la couleur du texte du menu déroulant affiché lorsqu'un débordement se produit sur les boutons ActionBar. Une idée de comment changer la couleur de ces menu déroulant / liste?

453voto

rnoway Points 3636

Ok, j'ai trouvé un meilleur moyen. Je suis maintenant en mesure 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>
 

101voto

Phil Points 11964

J'ai trouvé un moyen qui fonctionne bien avec toute la saveur de l' ActionBar (Sherlock, Compat, et Natif):

Suffit d'utiliser html pour définir le titre, et de spécifier la couleur du texte. Par exemple, pour définir l' ActionBar texte de couleur rouge, il suffit de faire ceci:

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

Vous pouvez également utiliser le rouge code hexadécimal #FF0000 au lieu du mot red. Si vous rencontrez des problèmes avec cela, voir Android Html.fromHtml(String) ne marche pas pour <font color='#'>texte</font>.


En outre, si vous souhaitez utiliser une couleur de ressources, ce code peut être utilisé pour obtenir la bonne Chaîne HEXADÉCIMALE, et la suppression de l'alpha en cas de besoin (la police de la balise ne prend pas en charge 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))));

95voto

Budius Points 12015

J'avais le même problème que vous, c'est un thème Holo.Light mais je voulais styler la couleur ActionBar, donc j'avais besoin de changer la couleur du texte ainsi que les titres et les menus. Donc, à la fin, je suis allé à git hub et regardé 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>
 

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

68voto

Abhishek Chauhan Points 854

L'identifiant 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);
    }
}
 

28voto

Kangars Points 243

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é quand il faisait partie de Widget.Styled.ActionBar, donc j'ai dû l'ajouter à la racine. Les 2 autres attributs changent le titre et le sous-titre d'une barre d'action.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X