Цвет текста ActionBar
Как я могу изменить цвет текста ActionBar? Я унаследовал тему Holo Light, я могу изменить фон ActionBar, но я не знаю, что является атрибутом для настройки цвета текста.
Хорошо, я могу изменить цвет текста с помощью атрибута android: textColorPrimary, но он также изменяет цвет текста выпадающего меню, отображаемого при переполнении на кнопках ActionBar. Любая идея, как изменить цвет выпадающего меню/списка?
Ответы
Ответ 1
Хорошо, я нашел лучший способ. Теперь я могу изменить цвет названия. Вы также можете настроить субтитры.
Вот мои 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>
Ответ 2
У меня была та же проблема, что и у вас, это тема Holo.Light, но я хотел бы нарисовать цвет ActionBar, поэтому мне также нужно было изменить цвет текста, а также название и меню. Поэтому в конце я пошел в концентратор git и посмотрел исходный код, пока не нахожу чертовски правильный стиль:
<?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>
теперь вам нужно только установить @color/actionBarText
и @drawable/actionbarbground
все, что вам нужно!
Ответ 3
Я нашел способ, который хорошо работает с любым ароматом ActionBar
(Sherlock, Compat и Native):
Просто используйте html для установки заголовка и укажите цвет текста. Например, чтобы установить цвет текста ActionBar в красный цвет, просто выполните следующее:
getActionBar()/* or getSupportActionBar() */.setTitle(Html.fromHtml("<font color=\"red\">" + getString(R.string.app_name) + "</font>"));
Вы также можете использовать красный шестнадцатеричный код #FF0000
вместо слова red
. Если у вас возникли проблемы с этим, см. Android Html.fromHtml(String) не работает для < font color = '#' > text </font> .
Кроме того, если вы хотите использовать цветной ресурс, этот код можно использовать для получения правильной строки HEX и удаления альфы, если необходимо (тег шрифта не поддерживает альфа):
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))));
Ответ 4
Идентификатор ActionBar недоступен напрямую, поэтому вам нужно немного взломать здесь.
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);
}
}
Ответ 5
я сделал с простым одним строковым кодом
actionBar.setTitle(Html.fromHtml("<font color='#ff0000'>ActionBartitle </font>"));
Ответ 6
Добавьте его в корень панели действий. У меня была эта проблема.
<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 - изменяет цвет текста для текста панели действий, он никогда не работал, когда он был частью Widget.Styled.ActionBar
, поэтому мне пришлось добавить его в корневой каталог. Другие 2 атрибута изменяют название и субтитры панели действий.
Ответ 7
Настройка строки HTML на панели действий не работает в теме материала в SDK v21 +
Если вы хотите изменить его, вы должны установить основной цвет текста в вашем стиле .xml
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Material.Light">
<!-- Customize your theme here. -->
<item name="android:textColorPrimary">@color/actionbar-text-color</item>
</style>
</resources>
Ответ 8
Если вы хотите также стилизовать субтитры, просто добавьте это в свой собственный стиль.
<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
Люди, которые хотят получить тот же результат для библиотеки AppCompat
, тогда это то, что я использовал:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="CustomActivityTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="android:actionBarStyle">@style/MyActionBar</item>
<item name="actionBarStyle">@style/MyActionBar</item>
<!-- other activity and action bar styles here -->
</style>
<!-- style for the action bar backgrounds -->
<style name="MyActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:background">@drawable/actionbar_background</item>
<item name="background">@drawable/actionbar_background</item>
<item name="android:titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="android:subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="titleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
<item name="subtitleTextStyle">@style/MyTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="MyTheme.ActionBar.TitleTextStyle" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/color_title</item>
</style>
</resources>
Ответ 9
Это старая тема, но для будущих читателей, с помощью ToolBar делает все очень просто:
Toolbar toolbar = (Toolbar) findViewById(R.id.tool_bar);
toolbar.setTitle(R.string.app_name);
toolbar.setTitleTextColor(getResources().getColor(R.color.someColor));
setSupportActionBar(toolbar);
Ответ 10
Это решение, которое я использовал после проверки всех ответов
<!-- Base application theme. -->
<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorAccent">@color/Button_color</item>
<item name="android:editTextStyle">@style/EditTextStyle</item>
<item name="android:typeface">monospace</item>
<item name="android:windowActionBar">true</item>
<item name="colorPrimary">@color/Title_Bar_Color</item>
<item name="android:actionBarStyle">@style/Widget.Styled.ActionBar</item>
<item name="actionBarStyle">@style/Widget.Styled.ActionBar</item>
</style>
<style name="EditTextStyle" parent="Widget.AppCompat.EditText"/>
<style name="Widget.Styled.ActionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="titleTextStyle">@style/ActionBarTitleText</item>
<item name="android:background">@color/Title_Bar_Color</item>
<item name="background">@color/Title_Bar_Color</item>
<item name="subtitleTextStyle">@style/ActionBarSubTitleText</item>
</style>
<style name="ActionBarTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Title">
<item name="android:textColor">@color/solid_white</item>
<item name="android:textSize">12sp</item>
</style>
<style name="ActionBarSubTitleText" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Subtitle">
<item name="android:textColor">@color/solid_white</item>
<item name="android:textSize">12sp</item>
</style>
Измените требуемые цвета, которые будут работать
Ответ 11
Нашел способ сделать это красиво, не создавая собственный макет на API >= 21.
Он будет только раскрашивать тексты и управлять чертежами внутри панели действий.
Надеюсь, что это будет полезно для кого-то.
<!--Material design primary colors-->
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
<item name="colorPrimary">@color/primary</item>
<item name="colorPrimaryDark">@color/primary_dark</item>
<item name="colorAccent">@color/accent</item>
<item name="android:navigationBarColor">@color/primary_dark</item>
<item name="actionBarTheme">@style/AppBaseTheme.Toolbar</item>
</style>
<!--Action bar-->
<style name="AppBaseTheme.Toolbar" parent="Widget.AppCompat.ActionBar.Solid">
<item name="android:textColorPrimary">@color/action_bar_text</item>
<item name="colorControlNormal">@color/action_bar_text</item>
</style>
Ответ 12
Самый простой способ - сделать это в styles.xml.
Шаблон Google styles.xml в настоящее время создает следующее:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
Если вы добавите еще одну строку перед закрывающим тегом, как показано, это изменит цвет текста на то, что должно быть с Dark ActionBar:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>
Если вы хотите настроить цвет на что-то еще, вы можете указать свой собственный цвет в colors.xml или даже использовать встроенный цвет с Android с помощью атрибута android: textColorPrimary:
<style name="AppTheme" parent="Theme.AppCompat.Light">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionBarTheme">@style/AppTheme.AppBarOverlay</item>
</style>
<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
<item name="android:textColorPrimary">@android:color/darker_gray</item>
</style>
Примечание. Это изменяет цвет заголовка, а также названия любых элементов меню, отображаемых в ActionBar.
Ответ 13
Эта функция хорошо работает
private void setActionbarTextColor(ActionBar actBar, int color) {
String title = actBar.getTitle().toString();
Spannable spannablerTitle = new SpannableString(title);
spannablerTitle.setSpan(new ForegroundColorSpan(color), 0, spannablerTitle.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
actBar.setTitle(spannablerTitle);
}
то, чтобы использовать его, просто подайте ему свою панель действий и новый цвет, т.е.
ActionBar actionBar = getActionBar(); // Or getSupportActionBar() if using appCompat
int red = Color.RED
setActionbarTextColor(actionBar, red);
Ответ 14
Попробуйте множество методов, в нижней версии API, допустимый метод - <item name="actionMenuTextColor">@color/your_color</item>
и не использует пространство имен Android, надеюсь, вам поможет
пс:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="actionMenuTextColor">@color/actionMenuTextColor</item>
</style>
Ответ 15
Попробуйте добавить это в свою активность onCreate. Работает практически на всех версиях Android.
actionBar.setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
или
getSupportActionBar().setTitle(Html.fromHtml("<font color='#ffff00'>Your Title</font>"));
Ответ 16
Хорошим решением является использование пользователем SpannableStringBuilder и установка цвета таким образом. Вы можете использовать разные цвета в разных частях строки, добавлять изображения и т.д.
Протестировано с новой библиотекой поддержки.
Смотрите Android: окраска части строки с помощью TextView.setText()?
Ответ 17
Это не рекомендуемое решение, так как я собираюсь в android apis здесь, но поскольку мое приложение требует динамического изменения темы на условиях xml, здесь это невозможно, поэтому мне нужно это сделать. Но это решение работает очень хорошо.
Решение: -
/**
*
* @author Kailash Dabhi
* @email [email protected]
*
*/
public static void setActionbarTextColor(Activity activity, int color) {
Field mActionViewField;
try {
mActionViewField = activity.getActionBar().getClass()
.getDeclaredField("mActionView");
mActionViewField.setAccessible(true);
Object mActionViewObj = mActionViewField.get(activity
.getActionBar());
Field mTitleViewField = mActionViewObj.getClass().getDeclaredField(
"mTitleView");
mTitleViewField.setAccessible(true);
Object mTitleViewObj = mTitleViewField.get(mActionViewObj);
TextView mActionBarTitle = (TextView) mTitleViewObj;
mActionBarTitle.setTextColor(color);
// Log.i("field", mActionViewObj.getClass().getName());
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
Ответ 18
Для Android 5 (леденец) вам нужно будет использовать android: actionBarPopupTheme, чтобы установить textColor для меню переполнения.