40

Nel nuovo aggiornamento Google ha rilasciato una nuova libreria di supporto API, che supporta ActionBar in API 7+.android.support.v7 con `ActionBarActivity` nessun menu mostra

Ho usato ActionBarSherlock fino a questo aggiornamento e ho scritto il codice per caricare il menù:

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

e il file di menù:

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

Per impostare i pulsanti del menu nella barra delle operazioni. Questo codice ha funzionato perfettamente con ActionBarSherlock. Ma quando ho cambiato la barra delle azioni nella nuova libreria di supporto, i pulsanti non sono mostrati nella barra delle azioni. Anche se sono impostati come android:showAsAction="always". E quando eseguo il debug del codice, la funzione menu.getSize() restituisce 2, e ciò è corretto, ma non viene visualizzato alcun pulsante.

Perché i pulsanti non sono visualizzati nella nuova libreria di supporto?

risposta

104

Provare a premere il pulsante MENU sul dispositivo o sull'emulatore e vedere se compaiono nell'overflow.

In tal caso, il problema è che il codice XML <menu> deve essere modificato. Menu XML che funziona con ActionBarSherlock e la barra delle azioni API 11+ non funzionerà con il backport della barra delle azioni AppCompat.

Il menu XML avrebbe bisogno di simile a questa:

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

E si avrebbe bisogno di utilizzare lo stesso yourapp prefisso per qualsiasi altra cosa relativa alla barra delle azioni (ad esempio, yourapp:actionLayout).

È possibile vedere questo coperto in the action bar documentation.

+2

Sì, il problema era il 'xmlns: yourapp =" http://schemas.android.com/apk/res-auto "'. Questo è il cambiamento per il supporto v7? Causa in 'ActionBarSherlock' il mio vecchio codice funzionava perfettamente – nrofis

+5

@nrofis: non ho idea del perché AppCompat non possa usare' android: showAsAction' come ActionBarSherlock può. – CommonsWare

+0

Grazie questo è un cambiamento minuscolo e strano che sono riuscito a trascurare! –

0

vorrei aggiungere un po 'di the answer.

Se volete vedere sia testo e un'icona, si prega di utilizzare withText in showAsAction ho appena provato; quando ho usato always o ifRoom senza withText, ho visto solo un'icona.

Problemi correlati