Елементът от менюто 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