40

W nowej aktualizacji Google wydała nową bibliotekę wsparcia API, która obsługuje ActionBar na poziomie API 7+.android.support.v7 z "ActionBarActivity" brak menu pokazuje

użyłem ActionBarSherlock aż do tej aktualizacji i napisałem kod załadować menu:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.activity_main, menu); 
    return true; 
} 

i plik menu:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" android:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" android:showAsAction="always"></item> 
</menu> 

do skonfigurowania przycisków menu na pasku akcji. Ten kod działał doskonale z ActionBarSherlock. Ale kiedy zmieniłem pasek akcji na nową bibliotekę wsparcia, przyciski nie są wyświetlane na pasku akcji. Nawet jeśli są ustawione jako android:showAsAction="always". A kiedy debuguję kod, funkcja menu.getSize() zwraca 2 i jest to poprawne, ale nie są wyświetlane żadne przyciski.

Dlaczego przyciski nie są wyświetlane w nowej bibliotece pomocy?

Odpowiedz

104

Spróbuj nacisnąć przycisk MENU na urządzeniu lub emulatorze i sprawdź, czy pojawiają się w przepełnieniu.

Jeśli tak, to problem polega na tym, że Twój plik <menu> XML musi się zmienić. Menu XML, które działa z ActionBarSherlock i natywnym paskiem akcji interfejsu API Level 11+, nie będzie działało z backportiem paska akcji AppCompat.

Twój XML menu musiałby wyglądać tak:

<?xml version="1.0" encoding="utf-8"?> 
<menu 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:yourapp="http://schemas.android.com/apk/res-auto" 
> 
    <item android:id="@+id/item_menu_ok" android:icon="@drawable/ic_action_ok" 
     android:title="@string/ok" yourapp:showAsAction="always"></item> 
    <item android:id="@+id/item_menu_cancel" android:icon="@drawable/ic_action_cancel" 
     android:title="@string/cancel" yourapp:showAsAction="always"></item> 
</menu> 

I trzeba by użyć tego samego yourapp prefiks cokolwiek innego związanego z paska akcji (np yourapp:actionLayout).

Widać to pod numerem the action bar documentation.

+2

Tak, problem polegał na 'xmlns: yourapp =" http://schemas.android.com/apk/res-auto "'. To jest zmiana dla Support v7? Przyczyna w 'ActionBarSherlock' mój stary kod działał idealnie – nrofis

+5

@nrofis: Nie mam pojęcia, dlaczego AppCompat nie może używać' android: showAsAction' w taki sposób, w jaki może działać ActionBarSherlock. – CommonsWare

+0

To drobna i dziwna zmiana, którą udało mi się przeoczyć! –

0

Chciałbym dodać trochę the answer.

Jeśli chcesz zobaczyć tekst i ikony proszę skorzystać withText w showAsAction Właśnie testowałem go; kiedy użyłem always lub ifRoom bez withText, zobaczyłem tylko ikonę.

Powiązane problemy