Android ActionBar MenuItem LowerCase

时间:2013-06-11 13:01:27

标签: android android-actionbar menuitem lowercase

我想在ActionBar中将MenuItem标题设为LowerCase。

我的menu.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”,但我希望它看作“注册”和“取消注册”。

是否可以在MenuItem上设置首字母大写和下一个字母? 我怎么能这样做?

7 个答案:

答案 0 :(得分:43)

原生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在pre-ICS(https://github.com/JakeWharton/ActionBarSherlock/issues/969)上为大写。我已提交补丁但目前尚未合并。现在你可以使用我的fork:https://github.com/alexander-mironov/ActionBarSherlock/tree/dev,当我的代码在主存储库中合并时,我会更新这个答案。

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

答案 1 :(得分:25)

将以下内容添加到您的某个值xml文件 -

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

答案 2 :(得分:24)

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

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

答案 3 :(得分:9)

为了使菜单文本像“菜单项”一样小写到“菜单项”,这是我的解决方案。

在res&gt;&gt;值&gt;&gt; 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>

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

答案 4 :(得分:4)

我在这里尝试了其他一些答案,但没有运气(我没有使用动作栏sherlock)。正如评论中所提到的,在较新的支持库中,上述解决方案似乎不起作用。为解决此问题,我将自己的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();

然后,您可以使用文本视图执行所需操作,并避免文本全部大写。这绝对不是理想的,但是如果您需要针对此问题的解决方法,这确实有效。

答案 5 :(得分:0)

来自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);
...

答案 6 :(得分:0)

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