Должен использовать 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
или что угодно.