Как стилизовать элементы меню на панели действий Android

Было много вопросов о стилизации панелей действий, но те, которые я нашел, либо касаются стилизации вкладок, либо содержат ответы, которые мне не подходят.

Вопрос действительно очень простой. Я хочу иметь возможность изменять стиль текста (даже просто цвет) элементов меню на панели действий.

Я прочитал это: http://android-developers.blogspot.com/2011/04/customizing-action-bar.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FhsDu+%28Android+Дляразработчиков+Блог%29

И этот вопрос: Стиль панели действий в Android Honeycomb

Из которого я собрал тестовое приложение, которое я использую, чтобы попытаться изменить пункты меню. Он использует все значения по умолчанию для приложения, созданного в плагине eclipse для Android, за исключением следующих.

Файл стилей:

<?xml version="1.0" encoding="utf-8"?>
<resources>

<style name="MyAppTheme" parent="@android:style/Theme.Holo.Light">
    <item name="android:actionBarStyle">@style/MyActionBar</item>
</style>

<style name="MyActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:titleTextStyle">@style/MyActionBar.TitleTextStyle</item>
    <item name="android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item>
</style>

<style name="MyActionBar.TitleTextStyle"
    parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">#F0F</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">24dip</item>
</style>

<style name="MyActionBar.MenuTextStyle"
    parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textColor">#F0F</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textSize">24dip</item>
</style>
</resources>

Меню для панели действий:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

<item android:showAsAction="always|withText" android:icon="@android:drawable/ic_menu_edit"
    android:id="@+id/menu_item1" android:title="menu_item1"></item>

<item android:showAsAction="always|withText" android:icon="@android:drawable/ic_menu_edit"
    android:id="@+id/menu_item2" android:title="menu_item2"></item>

</menu>

Основной вид деятельности:

public class Main extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

/**
 * Create the options menu that is shown on the action bar
 */
@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
}
}

Приложение компилируется и запускается. Стиль текста заголовка панели действий работает отлично (это тот прекрасный оттенок розового #F0F, который я определил). Пункты меню не меняются, но отображаются со стилем по умолчанию (голографический свет).

Что я делаю неправильно ?


person sksamuel    schedule 20.05.2011    source источник


Ответы (8)


Вместо того, чтобы размещать элемент android:actionMenuTextAppearance в стиле панели действий, переместите его в тему приложения.

person Chris Feist    schedule 12.06.2012
comment
у меня это не работает :( используется только основной текстовый цвет... но это неправильное решение - person redestructa; 28.08.2013
comment
Чтобы изменить цвет, добавьте <item name="android:actionMenuTextColor">@color/action_bar_red</item> к теме приложения. - person Moritz; 25.08.2014
comment
По умолчанию текст пишется заглавными буквами. Как сделать первую букву прописной, а остальные строчными? - person Kaveesh Kanwal; 20.05.2016

Я знаю, что это старый пост, но на всякий случай кто-то смотрит здесь. Я добавил это в свой style.xml, и это сработало для меня.

<!-- This is the main theme parent -->
<style name="MyTabStyle">
    <item name="android:actionBarTabTextStyle">@style/MyTabTextStyle</item>
</style>

<style name="MyTabTextStyle" parent="@android:style/Widget.ActionBar.TabText">
    <item name="android:textAppearance">@android:style/TextAppearance.Medium</item>
    <item name="android:textSize">14sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:textColor">@color/pressed_skylogtheme</item>
</style>
person spaceMonkey    schedule 23.04.2013

Вы должны изменить

<style name="MyActionBar.MenuTextStyle"
parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">

to

<style name="MyActionBar.MenuTextStyle"
parent="android:style/TextAppearance.Holo.Widget.ActionBar.Menu">

также. Это работает для меня.

person Bryson1811    schedule 05.03.2012

Я думаю, что код ниже

<item name="android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item> 

должен быть в разделе MyAppTheme.

person Clans    schedule 19.12.2011
comment
это очень полезно, я пробовал то же самое, но не работал. Работал нормально при применении в MyAppTheme. - person Narendra; 03.09.2014

Ответ Криса работает на меня...

Мои значения-v11/styles.xml файл:

<resources>
<style name="LightThemeSelector" parent="android:Theme.Holo.Light.DarkActionBar">
    <item name="android:actionBarStyle">@style/ActionBar</item>
    <item name="android:editTextBackground">@drawable/edit_text_holo_light</item>
    <item name="android:actionMenuTextAppearance">@style/MyActionBar.MenuTextStyle</item>
</style>

<!--sets the point size to the menu item(s) in the upper right of action bar-->
<style name="MyActionBar.MenuTextStyle" parent="android:style/TextAppearance.Holo.Widget.ActionBar.Title">
    <item name="android:textSize">25sp</item>
</style>

<!-- sets the background of the actionbar to a PNG file in my drawable folder. 
displayOptions unset allow me to NOT SHOW the application icon and application name in the upper left of the action bar-->
<style name="ActionBar" parent="@android:style/Widget.Holo.ActionBar">
    <item name="android:background">@drawable/actionbar_background</item>
    <item name="android:displayOptions"></item>
</style>

<style name="inputfield" parent="android:Theme.Holo.Light">
    <item name="android:textColor">@color/red2</item>
</style>  
</resources>
person jayseattle    schedule 25.06.2013
comment
Это работает для меня для размера текста... но не для цвета. Как это странно! - person Manfred Moser; 24.09.2013

Я сделал так:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="actionMenuTextAppearance">@style/MenuTextAppearance</item>
    <item name="android:actionMenuTextAppearance">@style/MenuTextAppearance</item>
    <item name="actionMenuTextColor">@color/colorAccent</item>
</style>

<style name="MenuTextAppearance" >
    <item name="android:textAppearance">@android:style/TextAppearance.Large</item>
    <item name="android:textSize">20sp</item>
    <item name="android:textStyle">bold</item>
</style>
person Cabezas    schedule 02.08.2017

Я предполагаю, что вы также должны стилизовать представления, которые генерируются из информации меню в вашем onCreateOptionsMenu(). Стиль, который вы применяли до сих пор, работает, но я сомневаюсь, что элементы меню при отображении с текстом используют стиль, такой же, как и часть заголовка панели действий.

Вы можете посмотреть Menu.getActionView(), чтобы получить представление для действия меню, а затем настроить его соответствующим образом.

person Jerry Brady    schedule 03.08.2011

Навигация BottomNavigationView = (BottomNavigationView) findViewById(R.id.navigation);

    TextView textView = (TextView) navigation.findViewById(R.id.navigation_home).findViewById(R.id.smallLabel);
    textView.setTypeface(Typeface.DEFAULT_BOLD);
    textView = (TextView) navigation.findViewById(R.id.navigation_home).findViewById(R.id.largeLabel);
    textView.setTypeface(Typeface.DEFAULT_BOLD);
person BISHWAJEET    schedule 06.07.2018