2012-04-26 9 views
12

Sto aggiungendo voci di menu utilizzando il frammento onCreateOptionsMenu successo ...Elementi del menu del frammento di ActionBar. Metterli di fronte

@Override 
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{ 
    super.onCreateOptionsMenu(menu, inflater); 
    inflater.inflate(R.menu.additional_fragment_menu, menu); 
} 

Questo menu aggiuntivo sopra include 1 voce di menu. Quello che devo fare è mettere questa voce di menu davanti a tutti gli altri oggetti esistenti in modo che appaia prima sulla barra di azione. Attualmente appare per ultimo.

(Questo è un Android: showAsAction = "always" voce Sto aggiungendo)

Ho provato ad aggiungere a livello di codice, ma non esiste alcuna opzione in oggetto MenuItem per consentire di specificare icona e showAsAction bandiere.

Qualcuno ha qualche idea?

risposta

21

Ok ho rotto io stesso con un puntatore nella giusta direzione da EvilDuck. E sì dymmeh hai ragione puoi farlo programmaticamente !!

Quello che dovevo usare era una combinazione di orderInCategory e menuCategory. Android sembra ignorare orderInCategory se non si dispone di uno menuCategory specificato.

  • ho specificato la categoria di ogni singola voce di menu nella mia app impostando il valore dell'attributo menuCategory-"system".
  • mie voci di base (quelle che vengono caricati tramite la Activity) ho dovuto impostare numeri elevati orderInCategory, come 10, 11, 12, 13 ecc
  • Quando poi gonfiato e aggiunto l'ulteriore XML menù frammento con la stessa categoria e un valoreè apparso come primo elemento.
+0

Ho usato per _back_ voci di menu che sono gonfiate dall'attività stessa della categoria ** 'secondario' ** e nessuna categoria per gli elementi _front_ dei miei frammenti. Funziona (testato con emulatori da 2.3.7 a 4.4). Ordine nella categoria proprietà non utilizzata. – WebDucer

4

Prova con "android: orderInCategory" attributo voci di menu

+0

Ho provato questo sfortunatamente non ha fatto alcuna differenza. –

+0

strano ... che mi ha aiutato a riordinare gli articoli in ActionBar – EvilDuck

+0

Vedere la mia risposta (sotto/sopra). Grazie per l'aiuto. –

4

non sono sicuro dove stai ottenendo che non è possibile impostare l'opzione showAsAction o l'icona di programmazione es:

public void onCreateOptionsMenu(Menu menu) 
{ 
    menu.add(Menu.NONE, /** group ID.. not really needed unless you're working with groups **/ 
       0,   /** this is the items ID (get this in onOptionsItemSelected to determine what was clicked) **/ 
       Menu.NONE, /** ORDER.. this is what you want to change **/ 
       "Cancel") /** title **/ 
       .setIcon(R.drawable.ic_menu_cancel) 
       .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 
} 

Documenti:

menu.add(int groupId, int itemId, int order, CharSequence title)

setShowAsAction(int actionEnum)

setIcon(int resId)

+0

ti rendi conto che dipende dalla versione dell'API di destinazione, giusto? – EvilDuck

+0

Sì. Sta usando frammenti + barra di azione, il che significa che sta usando l'API 11+ o la libreria di compatibilità per API 4+. Entrambi hanno i metodi che ho descritto – dymmeh

+0

, anche se la libreria Compat ha diversi metodi di classe di utilità per impostare showAsAction sulle voci di menu. – EvilDuck

0

Tutto è corretto, basta utilizzare sotto un codice di linea in onCreateView.

setHasOptionsMenu(true); 
Problemi correlati