Как изменить цвет заголовка панели действий в коде

У меня возникли проблемы с программным изменением цвета заголовка панели действий для v11 и выше. Я могу сделать это в xml, но вам нужно динамически изменять его в коде. Как мне это сделать? Спасибо заранее.

Ответ 1

Идентификатор заголовка ActionBar скрыт, или, другими словами, он внутренний и доступ к нему не может быть выполнен обычным образом. Вы можете ссылаться на него с помощью Resources.getIdentifier, затем View.findViewById.

Захватите идентификатор для action_bar_title

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

Теперь вы можете использовать идентификатор с TextView

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

Ответ 2

Вы можете использовать SpannableString и ForegroundColorSpan для установки цвета заголовка

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

Ответ 3

Другой способ - использовать Html

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

Ответ 4

Если вы используете библиотеку v7 appcompat (протестировано с r22), вы можете вызвать setTitleTextColor() на объект Toolbar, который заменяет панель действий для всех уровней API. Например:

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

Ответ 5

Если вы используете Sherlock Actionbar, вы можете использовать sherlock-actionbar-id для поддерживаемых панелей действий (Android ниже 3.0)

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