2013-07-28 15 views
24

Mam bardzo prosty kod, ale problem, którego nie mogę rozwiązać nawet po długim wyszukiwaniu w Google. Chcę mieć niektóre elementy akcji w moim pasku akcji, ale za każdym razem, gdy uruchomię aplikację, widzę tylko pasek akcji z logo aplikacji i tytułem: , ale nie ma elementów akcji.ActionBar Action Items nie pokazuje

Byłoby wspaniale, gdyby mógł mi pomóc, chyba jestem po prostu brakuje najbardziej oczywistą rzeczą;)

Ów metody w moim ActionBarActivity:

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

I to jest istotne. plik xml dla ActionBar (nazwane main_activity_actions.xml):

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

Kod jest wyświetlany poprawnie. Ale jaki jest twój minTargetSdk zadeklarowany w pliku manifestu i jaka jest wersja Androida, na którym testujesz aplikację? – lory105

Odpowiedz

70

To dlatego, że w przypadku korzystania z pomocy biblioteki AppCompat ActionBar i ActionBarActivity należy utworzyć menu w inny niż standardowy sposób tworzenia menu xml w ActioBarSherlock lub domyślny ActionBar.

Więc spróbuj tego kodu:

<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:icon="@drawable/ic_action_search" 
      android:title="@string/action_search" 
      app:showAsAction="always" /> 
     <item android:id="@+id/action_compose" 
      android:icon="@drawable/ic_action_compose" 
      android:title="@string/action_compose" 
      app:showAsAction="always"/> 
</menu> 

i zgłosić jeśli działa

Uwaga: sprawdź dodatkowe xmlns prefix: aplikację, która powinna być używana zamiast!

GL

+5

, aby wyjaśnić, "aplikacja" jest używana 3 razy: w menu i raz w każdej pozycji. Musiał zastosować diff, aby złapać :-) –

+0

dlaczego to działa? – WantIt

+1

ma to związek z używaniem biblioteki kompatybilnych aplikacji, dzięki czemu można z niej korzystać w starszych wersjach Androida. Jeśli kierujesz na nową wersję, nie musisz tego robić. i ustaw twój api min wyżej. – reidisaki

0

Spróbuj tego:

@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 true; 
} 
+1

nie, to nie działa w ten sposób. –

+0

Jestem ciekawy, zawsze używam tego wywołania zwrotnego w ten sposób i nigdy nie miałem problemu. Dlatego chciałbym się dowiedzieć, jaka jest twoja ogólna konfiguracja, jak minSDK i czy korzystasz z biblioteki wsparcia, czy nie? –

1

Tutaj można przejść, trzeba dodać do menu w XML tak:

<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item 
     android:id="@+id/menu_settings" 
     android:orderInCategory="0" 
     android:showAsAction="always" 
     android:icon="@drawable/menu"> 
    <menu> 
     <item android:id="@+id/action_search" 
      android:icon="@drawable/ic_action_search" 
      android:title="@string/action_search" 
      android:showAsAction="always" /> 
     <item android:id="@+id/action_compose" 
      android:icon="@drawable/ic_action_compose" 
      android:title="@string/action_compose" 
      android:showAsAction="always"/> 
     </menu> 
    </item> 
</menu> 
+0

to nie działa, elementy akcji wciąż nie są wyświetlane. –

6

maja pewność, że nie używasz stylu, który jest renderowanie swoje przedmioty akcji niewidoczne.

Na przykład, jeśli używasz "android: Theme.Holo.Light.DarkActionBar", otrzymasz czarny pasek akcji, więc nie będziesz mógł zobaczyć swoich czarnych przedmiotów.

Przełącz na "android: Theme.Holo.Light" i pojawią się.

Sprawdź w pliku (na przykład) res/values-v14/styles.xml