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, и это правильно, но никаких кнопок не отображается.
Почему кнопки не отображаются в новой библиотеке поддержки?
Ответы
Ответ 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
, я видел только значок.