Пункт меню приложения Android appcompat showAsAction не работает
У меня есть пункт меню, который отображается на android 4.x, но не на 2.x. Вот мой menu.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/menu_filter"
android:title="Filter"
app:showAsAction="always"/>
</menu>
Это мой стиль действия
<style name="style1_actionBar" parent="@style/Widget.AppCompat.Light.ActionBar">
<item name="android:background">@color/blue_dark</item>
<item name="android:textColor">@color/white</item>
<item name="actionMenuTextAppearance">@color/white</item>
<item name="background">@color/blue_dark</item>
</style>
Любые идеи?
Изменить: удалить двойную кавычку
Может ли это быть фактом, что я показываю только текст, никаких значков? Я как бы застрял здесь.
Ответы
Ответ 1
Ну, спасибо за помощь, ребята, но мне удалось это понять. Это не проблема с xml, это была проблема с функцией onCreateOptionsMenu.
Я использовал этот
new MenuInflater(getApplication()).inflate(R.menu.activity_wentry_editor, menu);
вместо этого
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_wentry_editor, menu);
Не совсем уверен, почему это работает, но это происходит.
Ответ 2
<menu xmlns:android="http://schemas.android.com/apk/res/android"
**xmlns:yourapp="http://schemas.android.com/apk/res-auto"** >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
**yourapp**:showAsAction="ifRoom" />
</menu>
Пожалуйста, обратитесь к документации. http://developer.android.com/guide/topics/ui/actionbar.html
Использование атрибутов XML из библиотеки поддержки
Обратите внимание, что вышеприведенный атрибут showAsAction использует собственное пространство имен, определенное в теге. Это необходимо при использовании любых атрибутов XML, определенных библиотекой поддержки, поскольку эти атрибуты не существуют в платформе Android на старых устройствах. Поэтому вы должны использовать свое собственное пространство имен в качестве префикса для всех атрибутов, определенных библиотекой поддержки.
Ответ 3
В моем случае мне пришлось добавить несколько строк в onCreateOptionsMenu.
Android Studio не позволяла мне использовать android: showAsAction = "ifRoom" при использовании appCompat.
app: showAsAction = "ifRoom" не работает, и я удалил его без проблем.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.menu, menu);
for (int i = 0; i < menu.size(); i++) {
menu.getItem(i).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
}
return super.onCreateOptionsMenu(menu);
}
Ответ 4
Если вы хотите, чтобы ваше приложение поддерживало панель действий ниже 3.0, вам нужно использовать приложение compact v7 из библиотеки поддержки.
Также проверьте ссылку
Ответ 5
Используя меню в действии, которое расширяет AppCompact, необходимо импортировать контекст приложения в XML и использовать его:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<!-- "Mark Favorite", should appear as action button if possible -->
<item
android:id="@+id/action_favorite"
android:icon="@drawable/ic_favorite_black_48dp"
android:title="@string/action_favorite"
app:showAsAction="ifRoom"/>
<!-- Settings, should always be in the overflow -->
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
app:showAsAction="never"/>
</menu>
Что вам нужно сделать в основном: добавьте xmlns:app="http://schemas.android.com/apk/res-auto"
в элемент меню в формате yout XML и используйте showAsAction в следующем формате: app:showAsAction="ifRoom"
.
Если это возможно, отобразится значок на панели действий.