web-dev-qa-db-fra.com

Barre d'action Android MenuItem LowerCase

Je veux créer le titre MenuItem dans la barre d'actions en LowerCase.

mon 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"/>

Sur la barre d’action, il voit "ENREGISTREMENT" et "NON ENREGISTREMENT", mais je souhaite qu’il soit vu comme "Enregistrement" et "Désinscription".

Est-il possible de faire la première lettre en haut et les suivantes en bas dans MenuItem? Et comment je peux le faire?

38
Vladimir

Solution pour la mise en œuvre native 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>

Si vous utilisez ActionBarSherlock, il existe deux approches différentes:

1) Créez la ressource booléenne abs__config_actionMenuItemAllCaps et définissez-la sur false:

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

2) Ou créez un thème avec overriden actionMenuTextAppearance et utilisez-le dans 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>

VEUILLEZ NOTER: ActionBarSherlock comporte un bogue qui oblige MenuItem à être en majuscule sur les versions antérieures à ICS ( https://github.com/JakeWharton/ActionBarSherlock/issues/969 ). J'ai soumis un correctif mais il n'est pas fusionné pour le moment. Pour l'instant, vous pouvez utiliser mon fork: https://github.com/alexander-mironov/ActionBarSherlock/tree/dev , je mettrai à jour cette réponse lorsque mon code sera fusionné dans le référentiel principal.

UPDATE: mon correctif a été fusionné dans le référentiel principal ActionBarSherlock.

40
Alexander Mironov

Ajoutez ce qui suit à l’un de vos fichiers xml de valeurs -

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

Juste pour compléter la réponse, si vous utilisez AppCompat, le style parent est:

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

Pour mettre le texte du menu en minuscule, comme "ÉLÉMENT DE MENU" à "Élément de menu", voici ma solution.

Dans res >> values ​​>> styles.xml, ajoutez ce qui suit:

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

Après que vous puissiez l'appeler sur votre 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>

J'espère que ça aide. :)

9
Rhusfer

J'ai essayé quelques-unes des autres réponses ici, mais sans succès (je n'utilise pas la barre d'action Sherlock). Comme mentionné dans les commentaires, dans les bibliothèques de support les plus récentes, les solutions ci-dessus ne semblent pas fonctionner. Pour résoudre ce problème, j'ai ajouté mon propre actionLayout aux éléments de menu.

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

Puis dans mon code j'ai fait quelque chose comme ça.

final MenuItem done = menu.findItem(R.id.done);

done.setActionView(R.layout.menu_item_kingfisher_text_view);

TextView doneTextView = (TextView) done.getActionView();

Ensuite, vous pouvez faire ce que vous voulez avec la vue texte et éviter que le texte ne soit en majuscule. Ce n'est certainement pas idéal, mais si vous avez besoin d'une solution de contournement pour ce problème, cela fonctionne.

4
Zach Sperske

ajouter un thème à la barre d'outils avec 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>
0
ssdeno

À partir du code source dans 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);
}

Dans le projet: Créez un thème contextuel et appliquez-le à la création contextuelle d'un menu contextuel personnalisé s'il est prévu d'utiliser cette apparence dans l'ensemble de l'application, puis placez-le dans le thème principal de l'application.

<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);
...
0
Nikolay Nikiforchuk