Пункт меню ActionBarCompat не отображается

Вот мой general.xml файл

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/action_settings"
        android:orderInCategory="100"
        android:showAsAction="never"
        android:title="@string/action_settings"/>
    <item 
        android:id="@+id/next" 
        android:title="Next" 
        android:visible="true" 
        android:enabled="true" 
        android:showAsAction="always" 
        android:orderInCategory="1">

    </item>
    <item 
        android:id="@+id/Previous"
        android:title="Previous" 
        android:visible="true" 
        android:enabled="true" 
        android:orderInCategory="2" 
        android:showAsAction="always">

    </item>
    <item android:id="@+id/star" 
        android:icon="@drawable/ic_action_important" 
        android:enabled="true" 
        android:orderInCategory="0" 
        android:showAsAction="always" 
        android:title="Star" 
        android:visible="true">
    </item>

</menu>

Вот мой код

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // TODO Auto-generated method stub
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.general, menu);
    getSupportActionBar().setDisplayShowHomeEnabled(false);
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#003f84")));
    return true;
}

Теперь моя проблема в том, что пункты меню не отображаются на панели действий. Я делаю что-то не так здесь?


person Adnan    schedule 12.09.2013    source источник


Ответы (1)


showAsAction должно находиться в другом пространстве имен (yourapp в примере ниже).

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

youapp — это просто идентификатор пространства имен, указывающий на пространство имен http://schemas.android.com/apk/res-auto, вы можете изменить его на что угодно. SDK автоматически сопоставит это пространство имен с именем вашего пакета (см. журнал изменений ниже).

Добавлена ​​поддержка пользовательских представлений с пользовательскими атрибутами в библиотеках. Макеты, использующие настраиваемые атрибуты, должны использовать URI пространства имен http://schemas.android.com/apk/res-auto. вместо URI, который включает имя пакета приложения. Этот URI заменяется конкретным приложением во время сборки.

Это необходимо, чтобы он мог правильно находить атрибуты, недоступные в предыдущих версиях ОС и вместо этого являющиеся частью пакета вашего приложения. Примечание из документации:

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

person JRomero    schedule 12.09.2013
comment
ваше приложение, которое означает мое имя приложения? - person Adnan; 12.09.2013
comment
Нет, это ваш идентификатор пространства имен. Его можно назвать как угодно, если он уникален для других идентификаторов пространства имен. Что важно, так это пространство имен http://schemas.android.com/apk/res-auto. - person JRomero; 12.09.2013
comment
+1 - большое спасибо! Часть, которая решила мою проблему: обратите внимание, что атрибут showAsAction выше использует пользовательское пространство имен, определенное в теге, который я переносил на ABC из ABS, и перед showAsAction стояло android: вместо пользовательского пространства имен (yourapp: как используется выше). Как только я переключился на правильное пространство имен, он наконец показал мои действия (значки) на панели действий :) - person AgentKnopf; 15.05.2014