web-dev-qa-db-fra.com

Comment changer la couleur du titre de la barre d'action dans le code

J'ai du mal à changer la couleur du titre de la barre d'action androïdes par programme pour la version 11 et les versions ultérieures. Je peux le faire en xml mais je dois le changer dynamiquement dans le code. Comment dois-je procéder? Merci d'avance.

39
jfortunato

L'ID de titre ActionBar est masqué, ou en d'autres termes, il est interne et l'accès ne peut pas être fait de manière typique. Vous pouvez le référencer en utilisant Resources.getIdentifier puis View.findViewById bien que.

Prenez l'ID de l'action_bar_title

int titleId = getResources().getIdentifier("action_bar_title", "id", "Android");

Maintenant, vous pouvez utiliser l'ID avec un TextView

TextView abTitle = (TextView) findViewById(titleId);
abTitle.setTextColor(colorId);
81
adneal

Vous pouvez utiliser un SpannableString et ForegroundColorSpan pour définir la couleur du titre

    Spannable text = new SpannableString(actionBar.getTitle());
    text.setSpan(new ForegroundColorSpan(Color.BLUE), 0, text.length(), Spannable.SPAN_INCLUSIVE_INCLUSIVE);
    actionBar.setTitle(text);
71
Willy

Une autre façon est d'utiliser Html

getSupportActionBar().setTitle((Html.fromHtml("<font color=\"#FF4444\">" + getString(R.string.some_string) + "</font>")));
31
IvanP

Si vous utilisez bibliothèque v7 appcompat (testé avec r22), vous pouvez appeler setTitleTextColor() sur l'objet Toolbar qui remplace la barre d'action pour tous les niveaux d'API. Par exemple:

Toolbar actionBarToolbar = (Toolbar)activity.findViewById(R.id.action_bar);
if (actionBarToolbar != null)
    actionBarToolbar.setTitleTextColor(Color.RED);
14
matiash

Si vous utilisez Sherlock Actionbar vous pouvez utiliser le sherlock-actionbar-id pour les barres d'action prises en charge (Android ci-dessous 3.0)

int titleId = Resources.getSystem().getIdentifier("action_bar_title", "id", "Android");    
if ( 0 == titleId ) 
        titleId = com.actionbarsherlock.R.id.abs__action_bar_title;
9
salcosand