如何在Android操作栏上为菜单项设置样式

67

关于操作栏的样式问题,有很多问题已经在stackoverflow上得到解答。但我发现这些问题要么与选项卡的样式有关,要么给出的答案对我无效。

实际上我的问题非常简单。我想要改变操作栏菜单项的文本样式(甚至只是颜色)。

我看过了以下内容:

http://android-developers.blogspot.com/2011/04/customizing-action-bar.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FhsDu+%28Android+Developers+Blog%29

以及这个问题:

Style an Action Bar in 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)。但是菜单项未更改外观,仍然使用默认样式(holo light)。

我做错了什么?

8个回答

64

android:actionMenuTextAppearance项从您的操作栏样式移动到应用程序主题中。


3
对我来说不起作用:( 只有primaryTextColor被使用了...但那不是正确的解决方案。 - redestructa
3
要更改颜色,请在应用程序主题中添加 <item name="android:actionMenuTextColor">@color/action_bar_red</item> - Moritz
默认情况下,文本以大写字母显示。如何将第一个字母大写,其余小写? - Kaveesh Kanwal
如果我想在不是操作的项目上使用它怎么办?因为这似乎只适用于具有showAsAction="always"属性的项目。 - C0mpl3x

7

我知道这是一个旧帖子,但以防有人在这里寻找答案。我将以下内容添加到我的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>

5

你需要改变

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

为了

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

同样适用于我。


5

我认为以下代码

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

必须在MyAppTheme部分中。


非常有帮助,我也尝试过但没有成功。当应用在MyAppTheme中时,它可以正常工作。 - Narendra

4

Chris的答案对我有用...

我的values-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>

3
这对于文字大小起作用,但对于颜色没有效果。这太奇怪了! - Manfred Moser

3
我是这样做的:
<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>

1

我猜想您需要为onCreateOptionsMenu()中生成的视图设置样式。目前应用的样式有效,但我怀疑当呈现文本时,菜单项使用的样式是否与ActionBar的标题部分相同。

您可以尝试使用Menu.getActionView()获取菜单操作的视图,然后进行相应的调整。


0

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);

底部导航视图导航=(底部导航视图)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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接