Подтвердить что ты не робот

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, и это правильно, но никаких кнопок не отображается.

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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