Должен использовать android: showAsAction, если вы не используете библиотеку appcompat

У меня есть странная проблема, я использовал файл menu.xml в своем приложении для Android как:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:compat="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_refresh"
        android:orderInCategory="100"
        android:title="@string/action_refresh"
        android:icon="@drawable/toc"
        compat:showAsAction="always"/>
</menu>

и он работал хорошо, но несколько дней назад я обновлял свое затмение до последней версии, и после этого приложение: showAsAction = "всегда" показывает ошибку:

Должен использовать android: showAsAction, когда не используется библиотека appcompat и после этого мои иконки панели действий были перемещены в панель переполнения и вообще не отображались в панели действий.

В любом случае, библиотека appcompat является родительским элементом моего базового стиля. что я должен сделать, чтобы решить это?

Ответ 1

Это работает для меня, я использовал appcompatlibrary:

compat:showAsAction="always"

вместо:

app:showAsAction="always"

И использовать compat: showAsAction = "always", внутри menu.xml включить строку:

<menu   
   ......
  <!-- include the below line -->
    xmlns:compat="http://schemas.android.com/apk/res-auto" >

Ответ 2

Вам нужно сделать три вещи -

  • Добавьте эти 3 вещи xmlns:tools="schemas.android.com/tools" tools:context="com.example.sample.YourActivity" xmlns:yourapp="http://schemas.android.com/apk/res-auto" в тэг <menu>

    вместе с обычным xmlns:android="http://schemas.android.com/apk/res/android"

  • Добавьте yourapp:showAsAction="ifRoom" к вашему <item>.

  • Наконец, очистите свой проект через Project → Clean...

Последний шаг - это то, что решило это для меня. Просто очистка проекта (иногда они могут быть настолько грязными)

Вот как выглядит последний код:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="schemas.android.com/tools"
tools:context="com.example.sample.YourActivity"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >

<item
    android:id="@+id/action_share"
    android:orderInCategory="100"
    android:title="Share"
    android:icon="@drawable/ic_share_white"
    yourapp:showAsAction="ifRoom" />

</menu>

Ответ 3

Столкнулась с той же проблемой. Эти два варианта работали для меня:

1. Включение - xmlns: compat = "http://schemas.android.com/apk/res-auto" > , а затем использование: "compat: showAsAction =" ifRoom "/" > "

2. Не включая совместимость и просто используя: app: showAsAction = "ifRoom "/" >

PS: Использование Android Studio.

Ответ 4

Должен использовать android: showAsAction, когда не используется библиотека appcompat

Проблема: гарантирует, что элементы меню используют правильное пространство имен Id: AppCompatResource

При использовании библиотеки appcompat ресурсы меню должны ссылаться на showAsAction в пространстве имен приложений: а не на пространство имен android:

Аналогично, если вы не используете библиотеку appcompat, вы должны использовать атрибут android: showAsAction.

<menu xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   xmlns:compat="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_refresh"
        android:orderInCategory="100"
        android:title="@string/action_refresh"
        android:icon="@drawable/toc"
        tools:ignore="AppCompatResource"
        compat:showAsAction="always"/> 
</menu>

Ответ 5

Все, что вам нужно сделать, это добавить следующую строку в свой элемент item, чтобы пресечь предупреждение. Наличие пространства имен как compat vs app для "http://schemas.android.com/apk/res-auto" фактически не делает ничего особенного.

tools:ignore="AppCompatResource"

полный код:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:compat="http://schemas.android.com/apk/res-auto" >

    <item
        android:id="@+id/action_refresh"
        android:orderInCategory="100"
        android:title="@string/action_refresh"
        android:icon="@drawable/toc"
        tools:ignore="AppCompatResource"
        compat:showAsAction="always"/>
</menu>

Примечание: тег compat может быть app или что угодно.