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?
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.
Ajoutez ce qui suit à l’un de vos fichiers xml de valeurs -
<bool name="abc_config_actionMenuItemAllCaps">false</bool>
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>
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. :)
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.
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>
À 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);
...