2015-08-05 21 views
6

Ho un problema, desidero aggiungere l'elemento in una barra degli strumenti (material design) in modo programmatico.Aggiungi/rimuovi menu menu menuItem dinamicamente

Questa è una mia menù:

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" tools:context=".MainActivity"> 
    <item android:id="@+id/action_settings" android:title="@string/action_settings" 
     android:orderInCategory="100" android:showAsAction="never" /> 
</menu> 

So cambiare il testo, il colore, sfondo, e l'ascoltatore @Override

toolbar.setBackgroundColor 
toolbar.setTextColor 
toolbar.setNavigationIcon 
toolbar.setText 

non so come posso aggiungere una voce di menu con una categoria "android:orderInCategory="300"

Grazie.

Nota: ho tutto frammento, senza 1 Attività

Tree - > Activity - > Fragment1(here add menu item) - > Fragment2(add/remove menu item) - > Fragmentx .. 

risposta

3

Prova questa barra degli strumenti ha l'opzione GetMenu() quale menu

private static final String placeholder1="Something"; 
private static final int FIRST_ID=Menu.FIRST; 
private static final int SECOND_ID=Menu.FIRST+1; 


//To add an item 
toolbar.getMenu().add(Menu.NONE,FIRST_ID,Menu.NONE,R.string.placeholder1); 
toolbar.getMenu().add(Menu.NONE,SECOND_ID,Menu.NONE,R.string.placeholder2); 

//and to remove a element just remove it with id 
toolbar.getMenu().removeItem(FIRST_ID); 
+0

http://www.grokkingandroid.com/adding-action-items-from-within-fragments/ –

0

tornare nel file XML menu, è possibile aggiungere un menu oggetto non visibile (android: visible = false) e render visibile quando vuoi.

1

Prima di tutto mettere l'elemento che si desidera visualizzare/nascondere nel file xml. Diciamo che si tratta di "action_settings", come menzionato nel codice, ignorare il "onCreateOptionsMenu"

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.your_menu, menu); 
    MenuItem item = menu.findItem(R.id.action_settings); 
    if (yourConditionToShow) { 
     item.setVisible(true); 
    } else { 
     item.setVisible(false); 
    } 
    return true; 
} 
+1

Penso che la condizione dovrebbe essere testata nel metodo onPrepareOptionsMenu() – Zach

0

Nella tua onCreateOptionmenu, provare questo codice

//menu.add("groupId", "ItemId", "OrderID", "title") 
MenuItem item = menu.add(1, 100, 300, "Settings"); 
item.setIcon(R.drawable.ic_launcher); 
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); 

è anche possibile aggiungere l'impostazione come XML. È possibile controllare tramite itemid ("100") in onOptionsItemSelected.

Se non si desidera utilizzare come ItemId, è possibile creare ids file di risorse. E può utilizzare in questo modo,

//R.id.action_settings is from ids resource file 
MenuItem item = menu.add(1, R.id.action_settings, 300, "Settings"); 
0

1 Soluzione:

@Chitrang Grazie a un'idea, ho risolto con questa linea:

toolbar.inflateMenu(R.menu.menu_activity1); 
toolbar.inflateMenu(R.menu.menu_activity2); 
toolbar.inflateMenu(R.menu.menu_activityx); 

Opzioni selezionare R.menu.item1,2, x

2 Soluzione: Crea barra degli strumenti personalizzata: in "android.support.v7.widget.Toolbar" e puoi gestire tutte le icone.

<LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:gravity="center"> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1"></LinearLayout> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:gravity="center"> 

      <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="Toolbar Title" 
       android:layout_gravity="center" 
       android:id="@+id/toolbar_title" /> 
     </LinearLayout> 

     <LinearLayout 
      android:orientation="horizontal" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:gravity="right" 
      android:layout_marginRight="15dp"> 

      <ImageView 
       android:layout_width="wrap_content" 
       android:layout_height="24dp" 
       android:id="@+id/imageView10" 
       android:src="@drawable/sun" 
       android:adjustViewBounds="true" /> 
     </LinearLayout> 


    </LinearLayout> 
1

Se non si ha accesso alla barra degli strumenti, è possibile effettuare le seguenti operazioni:

1 - Aggiungere la voce al menu attraverso onCreateOptionsMenu():

public boolean onCreateOptionsMenu(Menu menu){ 

    super.onCreateOptionsMenu(menu); 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_item_id, menu); 

    return true; 
} 

2 - Creare un valore booleano uguale a true se l'articolo deve essere visibile

3 - Nascondere o mostrare l'elemento in base al valore del tuo booleano in onPrepareOptionsMenu()

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 

    MenuItem mi = menu.findItem(R.id.my_item_id); 

    if(displayItem) 
    mi.setVisible(true); 
    else 
    mi.setVisible(false); 

    return super.onPrepareOptionsMenu(menu); 
} 
Problemi correlati