【问题标题】:How to style the menu items on an Android action bar如何在 Android 操作栏上设置菜单项的样式
【发布时间】:2011-05-20 12:58:21
【问题描述】:

关于操作栏样式的问题有很多,但我发现的问题要么与标签样式有关,要么有对我不起作用的答案。

这个问题真的很简单。我希望能够更改操作栏中菜单项的文本样式(甚至只是颜色)。

我读过这个: 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)。菜单项不会更改,但会显示默认样式(全息灯)。

我做错了什么?

【问题讨论】:

    标签: android android-actionbar


    【解决方案1】:

    不要将android:actionMenuTextAppearance 项放在您的操作栏样式下,而是将其移动到您的应用主题下。

    【讨论】:

    • 它对我不起作用:(只使用了primaryTextColor...但这不是一个正确的解决方案
    • 要更改颜色,请将&lt;item name="android:actionMenuTextColor"&gt;@color/action_bar_red&lt;/item&gt; 添加到应用主题。
    • 默认情况下,文本大写。第一个字母大写,小写怎么写?
    • 如果我想在不是动作的项目上使用它怎么办?因为这似乎只适用于具有showAsAction="always" 的项目
    【解决方案2】:

    我知道这是一篇旧帖子,但以防万一有人在看这里。我将此添加到我的 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>
    

    【讨论】:

      【解决方案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">
      

      也是。这对我有用。

      【讨论】:

        【解决方案4】:

        我认为下面的代码

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

        必须在MyAppTheme 部分。

        【讨论】:

        • 它非常有帮助,我也在尝试,但没有奏效。在 MyAppTheme 中应用时工作正常。
        【解决方案5】:

        克里斯的回答对我有用...

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

        【讨论】:

        • 这适用于我的文本大小.. 但不适用于颜色。这是多么奇怪!
        【解决方案6】:

        我是这样做的:

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

        【讨论】:

          【解决方案7】:

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

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

          【讨论】:

            【解决方案8】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-08-24
              • 1970-01-01
              • 2012-07-16
              相关资源
              最近更新 更多