it-swarm.com.ru

Android appcompat пункт меню actionAction не работает

У меня есть пункт меню, который отображается на 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>

Это мой стиль actionbar

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

Есть идеи?

Правка: удалена двойная кавычка

Может ли это быть из-за того, что я показываю только текст, без значков? Я застрял здесь.

23
pickle_inspector

Вот так, спасибо за вашу помощь, ребята, но мне удалось понять это. Это не было проблемой с xml, это была проблема с функцией onCreateOptionsMenu.

Я использовал это

new MenuInflater(getApplication()).inflate(R.menu.activity_wentry_editor, menu); 

вместо этого

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_wentry_editor, menu);

Не совсем уверен, почему это работает, но это работает.

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

17
Ramesh

В моем случае мне пришлось добавить несколько строк в 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
Mario Eraso

Если вы хотите, чтобы ваше приложение поддерживало панель действий ниже 3.0, вам нужно использовать приложение compact v7 из библиотеки поддержки.

Также проверьте ссылка

0
Android Learner

Используя меню в деятельности, которая расширяет 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" в элемент меню в XML-файле и использовать showAsAction в следующем формате: app:showAsAction="ifRoom"

Это покажет значок на панели действий, если это возможно.

0
Sandro Machado