it-swarm.com.ru

android.support.v7 с `ActionBarActivity` без отображения меню

В новом обновлении Google выпустил новую библиотеку поддержки API, которая поддерживает ActionBar на уровне API 7+. 

До этого обновления я использовал ActionBarSherlock и написал код для загрузки меню:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_main, menu);
    return true;
}

и файл меню:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
        Android:title="@string/ok" Android:showAsAction="always"></item>
    <item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
        Android:title="@string/cancel" Android:showAsAction="always"></item>
</menu>

Для настройки кнопок меню на панели действий. Этот код отлично работал с ActionBarSherlock. Но когда я изменил панель действий на новую библиотеку поддержки, кнопки не отображаются на панели действий. Даже если они установлены как Android:showAsAction="always". И когда я отлаживаю код, функция menu.getSize() возвращает 2, и это правильно, но кнопки не отображаются ..

Почему кнопки не отображаются в новой библиотеке поддержки?

40
nrofis

Попробуйте нажать кнопку MENU на вашем устройстве или эмуляторе, и посмотрите, появляются ли они в переполнении.

Если это так, то проблема заключается в том, что ваш <menu> XML должен измениться. Меню XML, которое работает с ActionBarSherlock и встроенной панелью действий API уровня 11+, не будет работать с бэкпортом панели действий AppCompat.

Ваш XML меню должен выглядеть следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<menu
  xmlns:Android="http://schemas.Android.com/apk/res/Android"
  xmlns:yourapp="http://schemas.Android.com/apk/res-auto"
>
    <item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
        Android:title="@string/ok" yourapp:showAsAction="always"></item>
    <item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
        Android:title="@string/cancel" yourapp:showAsAction="always"></item>
</menu>

И вам нужно будет использовать тот же префикс yourapp для всего, что связано с панелью действий (например, yourapp:actionLayout).

Вы можете увидеть это в документации панели действий .

104
CommonsWare

Я хотел бы добавить немного к ответ.

Если вы хотите видеть текст и значок, используйте withText в showAsAction Я только что проверил это; когда я использовал always или ifRoom без withText, я видел только значок.

0
Maksim Dmitriev