it-swarm.com.ru

Следует использовать 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>

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

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

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

14
user1597278

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

  1. Добавьте эти 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"

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

  3. Наконец, очистите ваш проект через 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>
18
Advait S

Это работает для меня, я использовал 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" >
13
Mohammed Ali

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

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

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

PS: используя Android Studio.

5
Santosh Pillai

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

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

При использовании библиотеки appcompat ресурсы меню должны ссылаться на showAsAction в пространстве имен app:, а не на пространство имен 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>
0
z.houbin

Все, что вам нужно сделать, это добавить следующую строку в ваш элемент item, чтобы подавить предупреждение. Наличие пространства имен как compat против 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 или что угодно.

0
Smalls