2011-05-20 83 views
54

在动作栏上有很多关于样式的问题,但是我发现的问题都与样式化选项卡有关,或者得到的答案不适用于我。如何在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+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的可爱阴影)。菜单项不会改变,但使用默认样式(全光照)。

我在做什么错?

回答

56

而不是使用android:actionMenuTextAppearance项目在您的操作栏样式下,将它移动到您的应用程序主题下。

+2

谢谢大家, – tasomaniac 2012-10-09 10:40:52

+3

它不适合我:( 只使用primaryTextColor ...但这不是一个正确的解决方案 – redestructa 2013-08-28 13:51:49

+1

谢谢,完美的答案! – 2014-04-07 12:52:01

1

我的猜测是,您还必须对onCreateOptionsMenu()中的菜单信息生成的视图进行样式设置。你到目前为止应用的样式正在工作,但我怀疑菜单项在使用文本呈现时使用的风格与ActionBar的标题部分相同。

您可能想查看Menu.getActionView()以获取菜单操作的视图,然后相应地调整它。

4

我想下面

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

代码必须在MyAppTheme部分。

+1

没有任何影响 – Taranfx 2012-05-31 04:53:12

+0

其非常有帮助,我试图相同,但没有奏效。在MyAppTheme中应用时工作得很好。 – Narendra 2014-09-03 12:39:05

3

你必须改变

<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

我知道它的一个旧帖子,但以防万一任何人在这里看。我将它添加到我的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> 
2

克里斯的回答为我工作...

我的价值观-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

这适用于我的文字大小..但不是颜色。这有多奇怪! – 2013-09-23 20:37:38

1

我没有这样说:

<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>