Элемент с приложением: showAsAction не отображается

Я не могу понять, почему неправильно и несовместимо (AndroidStudio говорит мне «Должен использовать приложение: showAsAction с библиотекой appcompat)

<menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/search" android:showAsAction="always" /> </menu> 

Работает идеально, но правильная и совместимая версия, например

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" > <item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/search" app:showAsAction="always" /> </menu> 

Не показывая мою иконку вообще.

Я тестирую Samsung GT P5210 (android v. 4.4.2) и Nexus 7 (4.4.4)

Solutions Collecting From Web of "Элемент с приложением: showAsAction не отображается"

Вещи, которые вы всегда должны проверять, когда хотите использовать панель действий, – это

1) Расширение ActionBarActivity вместо Activity

public class MainMenu extends ActionBarActivity{

2) Выберите правильный стиль, определенный в манифесте

манифест

 <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > 

Стиль

  <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> </style> 

3) Выберите правильный заголовок для showAsAction

  <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> 

Это то, что большинство людей ошибается

4) Определите свое Menu в Activity

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); } 

Если вы выполните все следующие действия, ваша панель действий должна работать.

Затем вы должны добавить onClickListener для каждой позиции …

Я просто перечитал ваш вопрос и увидел, что ваша проблема – полная противоположность (но некоторые части моего старого ответа по-прежнему применяются к вашей проблеме), так что вот обновленный ответ:

Обновить:

Вы импортировали библиотеку appomppat в свой файл gradle, но, похоже, вы поддерживаете только устройства, более новые, чем API Level 11 или 14? Если это так, проверка на линт показывает, что вы импортировали библиотеку appcompat через gradle, и она думает, что вы должны использовать ActionBarActivity из-за импорта библиотеки. Вот почему вы получаете ошибку. Но поскольку ваш атрибут android:showAsAction работает, вы используете native Activity и правильный вызов атрибута native, даже если проверка на линт говорит, что это неправильно. Поэтому, если вы хотите удалить ошибку lint, вам нужно удалить библиотеку appcompat из файла gradle и, возможно, изменить тему своей деятельности на родную тему Holo Light, так как ваша текущая тема может опираться на тему appcompat.

Ответ, почему он не работает с пространством имен app находится в загрузке атрибута XML для соответствующего соответственно библиотечного кода, который обрабатывается в старом ответе.

Старый ответ

Если вы используете ActionBarActivity из библиотеки поддержки для доступа к устройствам ниже уровня API 11, основная проблема здесь заключается в том, что ActionBarActivity воссоздает некоторые из собственных атрибутов Android XML, таких как android:showAsAction в своей собственной области, которую вы определяете с помощью :

 xmlns:app="http://schemas.android.com/apk/res-auto" 

А затем получить доступ к ним с тем же атрибутом (здесь showAsAction ) в пространстве имен app: Таким образом, ActionBarActivity не может видеть или использовать собственный атрибут android:showAsAction поскольку он ищет его только в пространстве имен app а не в пространстве имен android .

Если вы хотите использовать собственный атрибут, вы должны использовать native Activity с Holo Theme, который поддерживается только с уровня API 11 и выше.

Добавь это:

 yourapp:showAsAction="ifRoom" 

или

 android:showAsAction 

например:

 <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> 

И в действии:

 @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_activity_actions, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle presses on the action bar items switch (item.getItemId()) { case R.id.action_search: openSearch(); return true; case R.id.action_compose: composeMessage(); return true; default: return super.onOptionsItemSelected(item); } } 

И читайте больше здесь