it-swarm.com.de

Android ActionBar MenuItem LowerCase

Ich möchte den MenuItem-Titel in der ActionBar auf LowerCase setzen.

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

In der ActionBar werden "REGISTER" und "UNREGISTER" angezeigt, aber ich möchte, dass es als "Register" und "Unregister" erscheint.

Ist es möglich, in MenuItem einen Anfangsbuchstaben und einen Anfangsbuchstaben einzugeben? Und wie kann ich das tun?

38
Vladimir

Lösung für die native ActionBar-Implementierung:

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

Wenn Sie ActionBarSherlock verwenden, gibt es zwei verschiedene Ansätze:

1) Erstellen Sie die boolesche Ressource abs__config_actionMenuItemAllCaps und setzen Sie sie auf false:

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

2) Oder erstellen Sie ein Theme mit overriden actionMenuTextAppearance und verwenden Sie es in 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>

BITTE BEACHTEN SIE: In ActionBarSherlock befindet sich ein Fehler, der dazu führt, dass MenuItem in Vor-ICS in Großbuchstaben dargestellt wird ( https://github.com/JakeWharton/ActionBarSherlock/issues/969 ). Ich habe den Patch eingereicht, wird aber im Moment nicht zusammengeführt. Für jetzt können Sie meine Gabel verwenden: https://github.com/alexander-mironov/ActionBarSherlock/tree/dev . Ich werde diese Antwort aktualisieren, wenn mein Code im Haupt-Repository zusammengeführt wird.

UPDATE: Mein Fix wurde im Haupt-ActionBarSherlock-Repository zusammengeführt.

40

Fügen Sie einer Ihrer Werte-XML-Dateien Folgendes hinzu:

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

Um die Antwort zu vervollständigen, lautet der übergeordnete Stil, wenn Sie AppCompat verwenden:

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

Um den Menütext in Kleinbuchstaben wie "MENU ITEM" in "Menu Item" umzusetzen, ist hier meine Lösung.

In res >> values ​​>> styles.xml fügen Sie Folgendes hinzu:

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

Nachdem Sie es auf Ihrem AppTheme aufrufen können:

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

Ich hoffe das hilft. :)

9
Rhusfer

Ich habe einige der anderen Antworten hier ausprobiert, aber ohne Erfolg (ich verwende keine Actionbar-Sherlock). Wie in den Kommentaren erwähnt, scheinen die oben genannten Lösungen in den neueren Support-Bibliotheken nicht zu funktionieren. Um dieses Problem zu lösen, fügte ich den Menüelementen ein eigenes actionLayout hinzu.

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

Dann habe ich in meinem Code so etwas gemacht.

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

done.setActionView(R.layout.menu_item_kingfisher_text_view);

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

Dann können Sie mit der Textansicht machen, was Sie möchten, und vermeiden, dass der Text alle Großbuchstaben ist. Dies ist definitiv nicht ideal, aber wenn Sie eine Problemumgehung für dieses Problem benötigen, funktioniert dies.

4
Zach Sperske

hinzufügen von Design zur Symbolleiste mit 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

Aus dem Quellcode in 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);
}

Im Projekt: Erstellen Sie ein Popup-Design und wenden Sie es bei der Popup-Erstellung für ein benutzerdefiniertes Popup an, wenn dieses Erscheinungsbild in der gesamten Anwendung verwendet werden soll.

<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