Я использую новую библиотеку appcompat v7, доступную начиная с Android 4.3 (уровень API 18).
Независимо от того, что указано в showAsAction для пункта меню, он не отображается - он всегда создает значок меню переполнения и помещает даже один пункт меню под меню.
Попытка добавить меню к такому действию:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_sizes, menu);
return true;
}
А вот и мое меню xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_add_size"
android:title="@string/menu_add_item"
android:orderInCategory="10"
android:showAsAction="always"
android:icon="@android:drawable/ic_menu_add" />
</menu>
Это ошибка новой библиотеки поддержки v7 или просто что-то не так с кодом? Я уже много раз использовал аналогичный код с ActionBarSherlock.
"always"
не рекомендуется; лучше использовать,"ifRoom"
пусть решает ОС».Ответы:
Возможно, вам не хватает необходимого пространства имен:
Замените
[yourapp]
имя своего приложения или любое пространство имен, которое вам нравится везде.Что еще стоит проверить:
ActionBarActivity
Проверьте, сохраняется ли проблема.
Справочная документация по Android: Добавление кнопок действий . Вот соответствующий текст:
источник
showAsAction
атрибут не существует в android-7, вы должны использовать пространство имен своего приложенияhttp://schemas.android.com/apk/res-auto
в каждом примере. Это не индивидуальный вариант и не тот, который соответствует вашему приложению. Это фактическое пространство имен из документации. Я думаю, что каждый имеет в виду собственный префикс , и на самом деле это может быть что угодно. Это правда?Разобрался сам. С библиотекой поддержки v7 showAsAction должно находиться в настраиваемом пространстве имен, например:
источник
Также убедитесь, что вы используете правильный надувной элемент в методе ActionBarActivity.onCreateOptionsMenu ().
Правильное решение:
Неправильное решение:
источник
Для фрагментов
Меню с настраиваемым пространством имен предотвратят отображение showAsAction.
Использование префикса «android:» для showAsAction будет работать, даже если Android Studio отметит, что вам следует использовать собственное пространство имен.
Это использует Android SDK 22 и фрагменты поддержки v4, если это имеет значение.
источник
tools:ignore
.Возникла та же проблема, но на Android 5. У меня есть 3 элемента, но ОС проигнорировала мой атрибут «всегда» и показала только 2 элемента. Вот мое решение:
источник
setShowAsActionFlags()
требует API 14, но для меня это все равно было лучшим решением.Также убедитесь, что у вас есть правильный путь для пространства имен. Если это неправильно, он не выдаст вам сообщения об ошибке.
я имел
вместо того
Все, что я знал, это то, что это не работает. Не уверен, как мне удалось забыть часть пути / apk, но это случилось. Никакого сообщения об ошибке, просто неуловимая ошибка, которую нужно отследить.
источник
В моем случае мне пришлось удалить из моего приложения build.gradle compile 'com.android.support:appcompat-v7:21.0.3'.
уведомление : мой min sdk = 14, и созданный проект студией Android вставил мою ненужную зависимость.
После этой замены вы можете написать android: showAsAction = "always"
источник
Возможно, это не ваш случай, но я использовал
new MenuInflater(this).inflate(R.menu.my_menu, menu);
меняя это на
getMenuInflater().inflate(R.menu.my_menu, menu);
исправил проблему!
источник
не работают, с supportLibraryVersion = '25 .1.0 'compileSdkVersion = 25
см. «Предупреждение»
Следует использовать app: showAsAction с библиотекой appcompat с xmlns: app = "http://schemas.android.com/apk/res-auto" меньше ... (Ctrl + F1)
При использовании библиотеки appcompat ресурсы меню должны ссылаться на showAsAction в пространстве имен app:, а не на пространство имен android :.
Точно так же, когда вы не используете библиотеку appcompat, вы должны использовать атрибут android: showAsAction.
Думаю, на предупреждение можно не обращать внимания.
источник
добавьте собственное пространство имен, подобное этому, для showAsAction и actionViewClass:
источник
Я решил это заменой
с участием
Это выглядит как menuitme xml,
источник
Самый простой способ - изменить код, добавив
и измените этот код
в
и наконец
источник