Android ActionBar MenuItem Нижний регистр

Я хочу сделать заголовок MenuItem в ActionBar в нижнем регистре.

мое меню.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"/>

On the ActionBar it sees "REGISTER" and "UNREGISTER", but I want that it sees as "Register" and "Unregister".

Можно ли сделать первую букву выше, а следующие ниже в MenuItem? И как я могу это сделать?


person Vladimir    schedule 11.06.2013    source источник
comment
Я изменил свой ответ. Вы можете проверить это   -  person Alexander Mironov    schedule 13.06.2013


Ответы (7)


Решение для собственной реализации 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).). Я представил патч, но в данный момент он не объединен. А пока вы можете использовать мой форк: https://github.com/alexander-mironov/ActionBarSherlock/tree/dev, я обновлю этот ответ, когда мой код будет объединен в основной репозиторий.

ОБНОВЛЕНИЕ: мое исправление было объединено с основным репозиторием ActionBarSherlock.

person Alexander Mironov    schedule 13.06.2013
comment
Спасибо за ваше решение. Можно ли программно установить этот стиль в ActionBar? - person Martin Vysny; 12.03.2014
comment
При обновлении до версии 23.3.0 мне пришлось использовать textAllCaps без пакета Android. ‹item name=textAllCaps›false‹/item› - person Lucas Arrefelt; 20.04.2016

Добавьте следующее в один из ваших XML-файлов значений:

<bool name="abc_config_actionMenuItemAllCaps">false</bool>
person adarsh    schedule 11.10.2015

Чтобы завершить ответ, если вы используете AppCompat, родительский стиль:

<style name="MyMenuTextAppearance" parent="@style/TextAppearance.AppCompat.Widget.ActionBar.Menu">
    <item name="android:textAllCaps">false</item>
</style>
person Enrichman    schedule 14.03.2014
comment
Это не имеет никакого эффекта для меня с AppCompat на S3 и Nexus 4. Я могу изменить другие атрибуты actionMenuTextAppearance, такие как размер и стиль текста. Однако все заглавные буквы остаются. У меня есть версия 21.0.1 библиотеки поддержки. - person Mike Ortiz; 18.11.2014
comment
@Mike: это работало со старыми библиотеками поддержки. Но как-то в 21.0.х уже не работает. Интересно, почему. Может быть, они вообще не хотят, чтобы это работало? Немного раздражает. - person Patrick Boos; 24.11.2014
comment
Я столкнулся с той же проблемой. - person jagmohan; 04.12.2014
comment
Кто-нибудь когда-нибудь нашел решение здесь? Я страдаю от той же проблемы. - person Zach Sperske; 01.07.2015
comment
При обновлении до версии 23.3.0 мне пришлось использовать textAllCaps без пакета Android. ‹item name=textAllCaps›false‹/item› - person Lucas Arrefelt; 20.04.2016
comment
да, я вижу, вам нужно поместить пакет Android в оба места: ‹item name=actionMenuTextAppearance›@style/MyMenuTextAppearance‹/item› с ‹item name=textAllCaps›false‹/item› - person hmac; 09.11.2016

Мое решение для перевода текста меню в нижний регистр, например «ПУНКТ МЕНЮ» до «Элемент меню».

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

Надеюсь, это поможет. :)

person Rhusfer    schedule 15.02.2018

Я попробовал некоторые другие ответы здесь, но безуспешно (я не использую панель действий Шерлок). Как упоминалось в комментариях, в новых библиотеках поддержки вышеуказанные решения, похоже, не работают. Чтобы решить эту проблему, я добавил свой 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();

Затем вы можете делать то, что хотите, с текстовым представлением и избегать того, чтобы текст был полностью заглавным. Это определенно не идеально, но если вам нужен обходной путь для этой проблемы, это работает.

person Zach Sperske    schedule 01.07.2015

Из исходного кода в 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);
...
person Nikolay Nikiforchuk    schedule 07.02.2017

добавить тему на панель инструментов с помощью 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"
            />

стили.xml

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