У меня возникли проблемы с программным изменением цвета заголовка панели действий для 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;