Подтвердить что ты не робот

Элемент с приложением: 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)

4b9b3361

Ответ 1

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

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 для каждой позиции...

Ответ 2

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

Обновление:

Вы импортировали библиотеку appcompat в свой файл gradle, но, похоже, вы поддерживаете только устройства, более новые, чем API 11 или 14? Если это так, проверяется, что вы импортировали библиотеку appcompat через gradle, и она думает, что вы должны использовать ActionBarActivity из-за импорта библиотеки. Вот почему вы получаете ошибку. Но по мере того, как ваш атрибут android:showAsAction работает, вы используете собственный Activity, а собственный атрибут атрибута правильный, даже если проверка на линт говорит, что это неправильно. Поэтому, если вы хотите удалить ошибку 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.

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

Ответ 3

addthis:

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);
    }
}

И читайте здесь

Ответ 4

На - КОТЛИН

 <item android:title="Next"
      android:orderInCategory="100"
      android:id="@+id/action_next"
      app:showAsAction="ifRoom"/>

Android Studio 3.4.2, сборка # AI-183.6156.11.34.5692245, построена 27 июня 2019 г. JRE: 1.8.0_152-release-1343-b01 amd64 JVM: 64-битная виртуальная машина OpenJDK от JetBrains sro Windows 10 10.0