【问题标题】:Android ActionBar MenuItem LowerCaseAndroid ActionBar MenuItem 小写
【发布时间】:2013-06-07 08:13:57
【问题描述】:

我想将 ActionBar 中的 MenuItem 标题设为小写。

我的菜单.xml

  <item android:id="@+id/register"
    android:title="Register"
    android:showAsAction="ifRoom|withText"/>

  <item android:id="@+id/unregister"
    android:title="Unregister"
    android:showAsAction="ifRoom|withText"/>

在 ActionBar 上它看到“REGISTER”和“UNREGISTER”,但我希望它看到“Register”和“Unregister”。

是否可以在 MenuItem 中将第一个字母设置为大写,将下一个字母设置为小写? 我该怎么做?

【问题讨论】:

  • 我改变了我的答案。你可以去看看

标签: android android-actionbar menuitem lowercase


【解决方案1】:

原生ActionBar实现的解决方案:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="android:Theme.Holo">
        <item name="android:actionMenuTextAppearance">@style/MyMenuTextAppearance</item>
    </style>
    <style name="MyMenuTextAppearance" parent="android:TextAppearance.Holo.Widget.ActionBar.Menu">
        <item name="android:textAllCaps">false</item>
    </style>
</resources>

如果您使用的是 ActionBarSherlock,有两种不同的方法:

1) 创建布尔资源abs__config_actionMenuItemAllCaps并将其设置为false

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="abs__config_actionMenuItemAllCaps">false</bool>
</resources>

2) 或者使用覆盖的actionMenuTextAppearance 创建主题并在AndroidManifest.xml 中使用它:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme" parent="Theme.Sherlock">
        <item name="actionMenuTextAppearance">@style/MyMenuTextAppearance</item>
        <item name="android:actionMenuTextAppearance">@style/MyMenuTextAppearance</item>
    </style>
    <style name="MyMenuTextAppearance" parent="TextAppearance.Sherlock.Widget.ActionBar.Menu">
        <item name="android:textAllCaps">false</item>
    </style>
</resources>

请注意:ActionBarSherlock 中有一个错误会强制 MenuItem 在 ICS 之前为大写 (https://github.com/JakeWharton/ActionBarSherlock/issues/969)。我已经提交了补丁,但目前没有合并。现在你可以使用我的 fork:https://github.com/alexander-mironov/ActionBarSherlock/tree/dev,当我的代码合并到主存储库中时,我会更新这个答案。

更新:我的修复程序已合并到主 ActionBarSherlock 存储库中。

【讨论】:

  • 感谢您的解决方案。是否可以通过编程方式将此样式设置为 ActionBar?
  • 当升级到支持 rev 23.3.0 时,我不得不在没有 android 包的情况下使用 textAllCaps。
【解决方案2】:

将以下内容添加到您的值 xml 文件之一 -

<bool name="abc_config_actionMenuItemAllCaps">false</bool>

【讨论】:

    【解决方案3】:

    只是为了完成答案,如果您使用的是 AppCompat,则父样式为:

    <style name="MyMenuTextAppearance" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
        <item name="android:textAllCaps">false</item>
    </style>
    

    【讨论】:

    • 这对我在 S3 和 Nexus 4 上使用 AppCompat 没有任何影响。我可以更改其他 actionMenuTextAppearance 属性,例如文本大小和样式。但是,所有大写字母仍然存在。我有 rev 21.0.1 的支持库。
    • @Mike:它适用于较旧的支持库。但不知何故,它不再适用于 21.0.x。我想知道为什么。也许他们根本不希望这样做?有点烦人。
    • 我也面临同样的问题。
    • 有人在这里找到解决方案吗?我也遇到了同样的问题。
    • 当升级到支持 rev 23.3.0 时,我不得不在没有 android 包的情况下使用 textAllCaps。
    【解决方案4】:

    为了使菜单文本变成小写,例如“菜单项”到“菜单项”,这是我的解决方案。

    在 res >> values >> styles.xml 中添加以下内容:

    <style name="MenuItemTextAppearance" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
        <item name="textAllCaps">false</item>
    </style>
    

    在您可以在 AppTheme 上调用它之后:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">...</item>
        <item name="colorPrimaryDark">...</item>
        <item name="colorAccent">...</item>
        <item name="actionMenuTextAppearance">@style/MenuItemTextAppearance</item>
    </style>
    

    我希望这会有所帮助。 :)

    【讨论】:

      【解决方案5】:

      我在这里尝试了其他一些答案,但没有成功(我没有使用操作栏 sherlock)。如 cmets 中所述,在较新的支持库中,上述解决方案似乎不起作用。为了解决这个问题,我在菜单项中添加了自己的 actionLayout。

      <item
          android:id="@+id/done"
          app:showAsAction="always"
          android:title="@string/yourTitle"/>
      

      然后在我的代码中我做了这样的事情。

      final MenuItem done = menu.findItem(R.id.done);
      
      done.setActionView(R.layout.menu_item_kingfisher_text_view);
      
      TextView doneTextView = (TextView) done.getActionView();
      

      然后你可以用文本视图做你想做的事,避免文本全部大写。这绝对不理想,但如果您需要解决此问题的方法,这确实有效。

      【讨论】:

        【解决方案6】:

        来自android.support.v7.internal.view.menu.ListMenuItemView中的源代码

        //Set text appearance in constructor from style
        ...
        mTextAppearance = a.getResourceId(R.styleable.MenuView_android_itemTextAppearance, -1);
        ...
        
        //Apply text appearance to view item
        mTitleView = (TextView) findViewById(R.id.title);
        if (mTextAppearance != -1) {
            mTitleView.setTextAppearance(mTextAppearanceContext, mTextAppearance);
        }
        

        在项目中: 如果计划在整个应用程序中使用此外观,则创建弹出式主题并将其应用于某些自定义弹出式的弹出式创建,然后将其放入主应用程序主题。

        <style name="PopupTheme" parent="@style/Theme.AppCompat.Light.NoActionBar">
          <item name="android:itemTextAppearance">@style/FontStyle</item>
        </style>
        
        ...
        Context context = new ContextThemeWrapper(getActivity(), R.style.PopupTheme);
        MenuPopupHelper optionsMenu = new MenuPopupHelper(context, menuBuilder, anchorView);
        ...
        

        【讨论】:

          【解决方案7】:

          使用 textAllCaps 将主题添加到工具栏

          <android.support.v7.widget.Toolbar
                      android:id="@+id/toolbar"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"          
                      android:minHeight="?attr/actionBarSize"            
                      app:theme="@style/ToolBarStyle"
                      app:titleTextColor="@color/colorAccent"
                      app:subtitleTextColor="@color/colorAccent"
                      />
          

          styles.xml

          <style name="ToolBarStyle" parent="Theme.AppCompat">          
                  <item name="android:textAllCaps">false</item>
              </style>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-31
            相关资源
            最近更新 更多