Панель действий показывает выпадающее меню, когда только один пункт в меню


Я использую тему app compat в моем приложении, и в панели действий у меня есть меню с одним пунктом, который должен отображаться в виде значка , но вместо этого я получаю кнопку меню, как это

Введите описание изображения здесь

Вот мой код меню xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_play"
        android:icon="@drawable/play"
        android:orderInCategory="100"
        android:showAsAction="always"/>

</menu>

А вот код того, как я инициализирую панель действий:

getSupportActionBar().setHomeButtonEnabled(true);
        getSupportActionBar().setTitle(title);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(false);

И показать меню:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.names, menu);
        playStop = menu.findItem(R.id.action_play);
        return true;
    }

Итак, может ли кто-нибудь помочь мне отобразить пункт меню так, как он должен?

Спасибо

2 5

2 ответа:

Используя библиотеку поддержки, 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>

Если в панели действий недостаточно места для элемента, он появится в переполнении действия.

использование атрибутов XML из библиотеки поддержки

Обратите внимание, что атрибут showAsAction выше использует пользовательское пространство имен, определенное в теге. Это необходимо при использовании любого XML атрибуты, определенные библиотекой поддержки, потому что эти атрибуты делают не существует в рамках Android на старых устройствах. Так что вы должны использовать ваше собственное пространство имен в качестве префикса для всех атрибутов, определенных вспомогательная библиотека.


Таким образом, ваш XML-файл меню должен быть

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/action_play"
        android:icon="@drawable/play"
        android:orderInCategory="100"
        app:showAsAction="always"/>

</menu>

Вам нужно использовать

app:showAsAction="always" 

Вместо

android:showAsAction="always"