2012-03-29 4 views

ответ

81

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

захватить ID для action_bar_title

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

Теперь вы можете использовать ID с TextView

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

Это не работает на моем Moto Razor. – antonio081014

+0

Это не работает для меня:/ – Si8

+1

Эта вещь не работает для меня. Чтобы убедиться, что нет статического заголовка в панели действий, поэтому я использую «action_bar_title» в вызове метода getIdentifier. То же самое касается «id» и «android». Я использую библиотеку v7-appcompat. – MSIslam

9

Если вы используете Sherlock Actionbar вы можете использовать Шерлок-ActionBar-идентификатор для поддерживаемых панелей действий (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; 
+1

Не могу просто сделать это: getSherlockActivity(). GetSupportActionBar(). SetTitle ("НАЗВАНИЕ"); ?? – marchinram

+2

Вы можете сделать это, когда хотите просто изменить заголовок. но этот вопрос собирался изменить цвет заголовка. – salcosand

+0

Поэтому вам нужно получить TextView в ActionBar, и для этого вам понадобится идентификатор для TextView. И id отличается в Sherlock ActionBar и натовском. – salcosand

24

Другой способ использует Html

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

Этот, по моему мнению, самый пуленепробиваемый ответ. – Ercan

+2

Это по-прежнему самый надежный способ установить его. – DarkWolffe

60

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

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

Это должно быть принятое решение, основанное на внутреннем API (id_ action_bar_title), является плохой идеей, так как это может измениться без уведомления. – fernandohur

+1

Это лучший ответ. В частности, на KitKat, используя v7 appcompat library FAILs в решении action_bar_title id. Используйте этот ответ! – Codeversed

+0

работает как шарм – Dien

10

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

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

Когда я обновил свой проект для компиляции для Lollipop, этот ответ является единственным правильным (аварийный ответ Adneal) – Fraser

+1

Я использую библиотеку поддержки 21.0.3, и это больше не работает, если я не сделал никакой ошибки, очевидно. Сначала попробуйте решение IvanP. –

+0

@ ČikićNenad Исправлено для appcompat r22 (по крайней мере, должно работать и с r21). – matiash

Смежные вопросы