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

Пункт меню приложения 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>

Любые идеи?

Изменить: удалить двойную кавычку

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

4b9b3361

Ответ 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".

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